LoginSignup
0
0

More than 1 year has passed since last update.

【はじめの一歩】OCIのMySQL Database Serviceをつかってみよう!(MDS+Python 他④)

Posted at

はじめに

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

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

本記事の・・・
OCI環境についてはMDS+Python 他①
DB構成についてはMDS+Python 他②
シンプルなデータ操作についてはMDS+Python 他③
をご確認ください。

プレースホルダー

変数のようなイメージで、記号や文字列に値を入れて処理できる。エスケープシーケンスがいらないなど利点アリ。プレースホルダーの言葉の意味はIT辞典などがわかりやすいです。
動かしてみて「MDS+Python 他③」との差を確認してみてください。

前処理
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()
プレースホルダー
sql_str = "INSERT INTO commodity (name,price) VALUES (%s,%s)"
直接指定、タプル、リスト
    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)
複数行指定
    data = (
       ("Py_イワシ", "100"),
       ("Py_アジ", "200"),
       ("Py_サバ", "300"),
       ("Py_サンマ", "400"),
       ("Py_マグロ", "900")
    )
    cur.executemany(sql_str, data)
後処理
    print("生鮮食品データの入力が完了しました!")

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

結果
$ 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は安価ですが、使わないのであれば、停止する、もしくは削除するのを忘れずに
    停止だけだと、ストレージは月単位で課金されます。
お片付け方法は、初回:MDS+Python 他① お片付けを参考にしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0