Pythonプログラムで計測したセンサデータ等をMySQLのデータベースに記録しておくと、後からデータ加工や閲覧するのに便利そう。
PythonからMySQLを操作する手段は幾つかあるようだが、MySQL公式サポートのMySQL Connectorについて、使い方の要点だけドキュメントから抜粋しまとめた。
MySQL Connectorのインストール
Ubuntu20.04の場合、MySQL Connectorのインストールはpipで一発でOK。
pip install mysql-connector-python
その他プラットフォームでのインストール方法は、公式ドキュメントを参照。
データベースへの接続とカーソル取得
MySQLサーバとの接続にはmysql.connector.connect()メソッドを使う。
import mysql.connector
cnx = mysql.connector.connect(user='ユーザ名', password='パスワード', database='DB名')
connect()メソッドにはMySQL認証用のユーザー名とパスワードを指定すればとりあえず接続出来る。下記ドキュメントに挙げられているように他にも引数で色々指定出来る。
データベース操作はカーソル経由で行う。カーソルはcnxのcursorメソッドを呼び出すと取得出来る。
cursor = cnx.cursor()
SQL文の実行
cursor.execute()メソッドにSQL文を文字列で指定するとDB処理が実行出来る。本家ドキュメントにそのPythonコーディング例が挙げられている。
以下、幾つか要点のみ抜粋してみる。
INSERT文
データの挿入を行うINSERT文の実行例。SQLの定型文とデータ本体を分けてexecute()メソッドに渡すことが出来る。commit()メソッドは毎回実行する必要は無く、幾つかexecute()メソッドを実行した後で実行するのでもOK。
add_employee = ("INSERT INTO employees "
"(first_name, last_name, hire_date, gender, birth_date) "
"VALUES (%s, %s, %s, %s, %s)")
data_employee = ('Geert', 'Vanderkelen', tomorrow, 'M', date(1977, 6, 14))
cursor.execute(add_employee, data_employee)
cnx.commit()
SELECT文
データの検索を行うSELECT文の実行例。INSERT文のように、SQL定型文とクエリ条件を分けてexecute()メソッドに渡すことが出来る。
query = ("SELECT first_name, last_name, hire_date FROM employees "
"WHERE hire_date BETWEEN %s AND %s")
hire_start = datetime.date(1999, 1, 1)
hire_end = datetime.date(1999, 12, 31)
cursor.execute(query, (hire_start, hire_end))
SELECT文の実行結果を取得
SELECT文の実行結果はカーソル経由で取り出すことが出来る。
for (first_name, last_name, hire_date) in cursor:
print("{}, {} was hired on {:%d %b %Y}".format(
last_name, first_name, hire_date))
クローズ処理
DB処理が終わったらカーソルと接続をクローズする。
cursor.close()
cnx.close()
プログラムの大雑把な流れ
以上から、プログラムの一連の流れを大雑把にまとめると以下のような感じになる。
import mysql.connector
# オープン
cnx = mysql.connector.connect(user='username', password='passwd', database='dbname')
cursor = cnx.cursor()
# SQL実行
sql = '処理したいSQL文の文字列'
cursor.execute(sql)
:
# クローズ
cursor.close()
cnx.close()
まとめ
MySQL Connectorの使い方を公式ドキュメントで調べて、要点をまとめてみた。プログラムは、
- DBのオープン
- SQL処理
- DBのクローズ
という非常にシンプルな構造でMySQLの操作が出来る。
上記のようにSQLをPythonから実行してセンサデータの記録を行うためには、MySQLデータベースの事前準備が必要。手順は以下の記事にまとめた。

コメント