【はじめの一歩】OCIのMySQL Database Serviceをつかってみよう！（MDS＋Python 他④）

# はじめに
講釈よりも、とにかく触りたい・使いたい初心者向け手順書テイスト
OCIのMDSをたてて、Python等で繋げて使ってみる。
今回はConnector/Pythonを利用しDBへの特殊なデータ追加（プレースホルダー）まで。
前提：OCIの有償アカウントであること（30日間無料トライアルの方もOKです）

本手順は、翔泳社の良書
[MySQL徹底入門 第4版 MySQL 8.0対応](https://www.shoeisha.co.jp/book/detail/9784798161488)を参考としています。
同書籍の[サンプルファイル](https://www.shoeisha.co.jp/book/download/9784798161488)を活用します。
※サンプルファイルのReadMeに以下のありがたいお言葉があるので活用して効率化します。
「本書のサンプルデータは自由に利用できることとします。改変のほか、自由に利用、複製、再配布することができます。」
ただ、サンプルファイルの日本語部分は文字化けしているファイルがあるので、
そのまま使うのが難しい場合があります。

本記事の・・・
OCI環境については[MDS＋Python 他①](https://qiita.com/hm-peasant/items/246b19095e347e568f44)
DB構成については[MDS＋Python 他②](https://qiita.com/hm-peasant/items/07660df8261e6ea16a43)
シンプルなデータ操作については[MDS＋Python 他③](https://qiita.com/hm-peasant/items/c861eb82da6a8ac5aa8a)
をご確認ください。
# プレースホルダー
変数のようなイメージで、記号や文字列に値を入れて処理できる。エスケープシーケンスがいらないなど利点アリ。プレースホルダーの言葉の意味はIT辞典などがわかりやすいです。
動かしてみて「MDS＋Python 他③」との差を確認してみてください。

```ruby:前処理
import mysql.connector
from mysql.connector import errorcode
try:
    conn = mysql.connector.connect(user='mdsuser', password='Mdsp@ss01',
                                   host='10.0.1.51',
                                   database='mdstest', use_pure=True)
    conn.autocommit = True
    cur = conn.cursor()
```
```ruby:プレースホルダー
sql_str = "INSERT INTO commodity (name,price) VALUES (%s,%s)"
```

```ruby:直接指定、タプル、リスト
    cur.execute(sql_str, ("Py_リンゴ(10kg)", "4000"))

    data_tpl = ("Py_ブドウ(3kg)","5000")
    cur.execute(sql_str, data_tpl)

    data_lst = ["Py_ミカン(10kg)","3000"]
    cur.execute(sql_str, data_lst)
```
```ruby:複数行指定
    data = (
       ("Py_イワシ", "100"),
       ("Py_アジ", "200"),
       ("Py_サバ", "300"),
       ("Py_サンマ", "400"),
       ("Py_マグロ", "900")
    )
    cur.executemany(sql_str, data)
```
```ruby:後処理
    print("生鮮食品データの入力が完了しました！")

except mysql.connector.Error as err:
    print("VendorError:", err.errno)
    print("SQLState:", err.sqlstate)
    print("SQLException:", err.msg)
else:
    cur.close()
    conn.close()

```
```ruby:結果
$ mysql -u MDSのユーザー名 -p -h MDSのプライベートIPアドレス
例：$ mysql -u root -p -h 10.0.1.51
Enter password: MDSのユーザーのパスワード
＜中略＞
mysql> use mdstest
＜中略＞
mysql> SELECT * FROM commodity;
+------+--------------------+-------+------------+---------------------+
| code | name               | price | start_date | last_update         |
+------+--------------------+-------+------------+---------------------+
|    1 | Py_トマト001       |   100 | NULL       | 2022-06-01 00:26:06 |
|    2 | Py_リンゴ(10kg)    |  4000 | NULL       | 2022-06-01 02:00:14 |
|    3 | Py_ブドウ(3kg)     |  5000 | NULL       | 2022-06-01 02:00:14 |
|    4 | Py_ミカン(10kg)    |  3000 | NULL       | 2022-06-01 02:00:14 |
|    5 | Py_イワシ          |   100 | NULL       | 2022-06-01 02:00:14 |
|    6 | Py_アジ            |   200 | NULL       | 2022-06-01 02:00:14 |
|    7 | Py_サバ            |   300 | NULL       | 2022-06-01 02:00:14 |
|    8 | Py_サンマ          |   400 | NULL       | 2022-06-01 02:00:14 |
|    9 | Py_マグロ          |   900 | NULL       | 2022-06-01 02:00:14 |
+------+--------------------+-------+------------+---------------------+
9 rows in set (0.00 sec)

mysql> 
※code 1は前回の名残
```

今回は以上です。長文お付き合い頂き、ありがとうございました。

【重要】ＭＤＳは安価ですが、使わないのであれば、停止する、もしくは削除するのを忘れずに
　　　　停止だけだと、ストレージは月単位で課金されます。
お片付け方法は、[初回：MDS＋Python 他① お片付け](https://qiita.com/hm-peasant/items/246b19095e347e568f44#%E3%81%8A%E7%89%87%E4%BB%98%E3%81%91)を参考にしてください。