【はじめの一歩】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の起動
・コンピュートの起動
・Cloud Shellの起動とコンピュートへのSSH接続
```ruby:Cloud Shellからのssh接続
$ ssh -i 秘密キー パブリックIPアドレス -l opc
例：$ ssh -i ssh-key-2022-05-31.key 150.230.193.122-l opc

```
を行います。

# PYファイルの作成
■pyファイル作成
$ vi ファイル名.py
ファイルが開かれたら「i」キーを押下した後、処理内容を記入し、「ESCキー →　:(コロン)　→ wq!」で上書き保存

※ 「------- INSERT or UPDATE or DELETE -----------------」の前後に全処理共通の接続処理や例外処理を記入します。

mysql.connector.connectのカッコ内：user、password、host、databaseを自身の環境に合わせて編集
```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()

------- INSERT or UPDATE or DELETE -----------------

except mysql.connector.Error as err:
    print("VendorError:", err.errno)
    print("SQLState:", err.sqlstate)
    print("SQLException:", err.msg)
else:
    cur.close()
    conn.close()
```
「------- INSERT or UPDATE or DELETE -----------------」の部分は以下の通り。

# データの追加
```ruby:INSERT 
    sql_str = "INSERT INTO commodity (code,name,price) VALUES (\'1\',\'Py_トマト001\',\'100\')"
    cur.execute(sql_str)
    print("データを追加しました。")
```

# データの更新
```ruby:UPDATE 
    sql_str = "UPDATE commodity  SET price=200 WHERE code=1";
    cur.execute(sql_str)
    print("データを更新しました。（price=100→200）")
```

# データの削除
```ruby:DELETE 
    sql_str = "DELETE FROM commodity WHERE code=1";
    cur.execute(sql_str)
    print("データを削除しました。(code=1,delete)")
```
# 実行
```ruby:実行
$ python ファイル名.py
$ mysql -u MDSのユーザー名 -p -h MDSのプライベートIPアドレス
例：$ mysql -u root -p -h 10.0.1.51
Enter password: 

mysql> use mdstest
mysql> SELECT * FROM commodity;
mysql> quit

```
```ruby:INSERT実行
$ python INSERT.py 
データを追加しました。
$ 
＜中略＞
mysql> SELECT * FROM commodity;
+------+-----------------+-------+------------+---------------------+
| code | name            | price | start_date | last_update         |
+------+-----------------+-------+------------+---------------------+
|    1 | Py_トマト001    |   100 | NULL       | 2022-05-31 23:32:27 |
+------+-----------------+-------+------------+---------------------+
1 row in set (0.00 sec)
```
```ruby:UPDATE実行
$ python UPDATE.py
データを更新しました。（price=100→200）
$
＜中略＞
mysql> SELECT * FROM commodity;
+------+-----------------+-------+------------+---------------------+
| code | name            | price | start_date | last_update         |
+------+-----------------+-------+------------+---------------------+
|    1 | Py_トマト001    |   200 | NULL       | 2022-05-31 23:32:27 |
+------+-----------------+-------+------------+---------------------+
1 row in set (0.00 sec)

mysql> 
```
```ruby:DELETE実行
$ python DELETE.py 
データを削除しました。(code=1,delete)
$
＜中略＞
mysql> SELECT * FROM commodity;
Empty set (0.00 sec)

mysql> 
```

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

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