PythonからMySQLデータベースを操作する

Pythonプログラムで計測したセンサデータ等をMySQLのデータベースに記録しておくと、後からデータ加工や閲覧するのに便利そう。
PythonからMySQLを操作する手段は幾つかあるようだが、MySQL公式サポートのMySQL Connectorについて、使い方の要点だけドキュメントから抜粋しまとめた。

スポンサーリンク

MySQL Connectorのインストール

Ubuntu20.04の場合、MySQL Connectorのインストールはpipで一発でOK。

pip install mysql-connector-python

その他プラットフォームでのインストール方法は、公式ドキュメントを参照。

MySQL :: MySQL Connector/Python Developer Guide :: 4.2 Installing Connector/Python from a Binary Distribution

データベースへの接続とカーソル取得

MySQLサーバとの接続にはmysql.connector.connect()メソッドを使う。

import mysql.connector

cnx = mysql.connector.connect(user='ユーザ名', password='パスワード', database='DB名')

connect()メソッドにはMySQL認証用のユーザー名とパスワードを指定すればとりあえず接続出来る。下記ドキュメントに挙げられているように他にも引数で色々指定出来る。

MySQL :: MySQL Connector/Python Developer Guide :: 7.1 Connector/Python Connection Arguments

データベース操作はカーソル経由で行う。カーソルはcnxのcursorメソッドを呼び出すと取得出来る。

cursor = cnx.cursor()

SQL文の実行

cursor.execute()メソッドにSQL文を文字列で指定するとDB処理が実行出来る。本家ドキュメントにそのPythonコーディング例が挙げられている。

MySQL :: MySQL Connector/Python Developer Guide :: 5 Connector/Python Coding Examples

以下、幾つか要点のみ抜粋してみる。

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の使い方を公式ドキュメントで調べて、要点をまとめてみた。プログラムは、

  1. DBのオープン
  2. SQL処理
  3. DBのクローズ

という非常にシンプルな構造でMySQLの操作が出来る。

上記のようにSQLをPythonから実行してセンサデータの記録を行うためには、MySQLデータベースの事前準備が必要。手順は以下の記事にまとめた。

MySQLコマンドラインによるデータベース操作のメモ
この記事でPythonプログラムからMySQLデータベースにアクセスする方法について公式ドキュメントの抜粋をしたが、事前準備などで使うMySQLコマンドラインの操作を備忘録としてまとめておく。MySQLユーザーとデータベースの作成MySQL...

コメント