PyMySQLを学ぶ理由
数万件のレコードをMySQLに挿入する場合、手作業での入力は現実的ではありません。Pythonコードからデータベースに接続し、CRUD操作を自動化することで、このような大量データの処理を効率よく行えます。
モジュールのインストール
パッケージのインストールはpip経由で行います。
pip install pymysql
アンインストールする場合は以下のコマンドを実行します。
pip uninstall pymysql
PyMySQLの基本的な使い方
1. 接続オブジェクトの作成
pymysql.connect()関数を呼び出してデータベースとの接続を確立します。主なパラメータは以下の通りです。
host: 接続先のホスト名(ローカルの場合は127.0.0.1やlocalhost)port: ポート番号(デフォルトは3306)user: データベースユーザー名password: パスワードdatabase: 接続先のデータベース名charset: 文字エンコーディング(utf8mb4などを推奨)
接続オブジェクトの主要なメソッド:
close(): 接続を閉じるcommit(): トランザクションをコミットするrollback(): トランザクションをロールバックする
2. カーソルオブジェクトの取得
SQL文を実行するには、接続オブジェクトからカーソルを取得します。
execute(query): SQL文を実行し、影響を受けた行数を返すfetchone(): 結果から1行を取得する(タプルを返す)fetchall(): 結果から全行を取得する(タプルのタプルを返す)close(): カーソルを閉じる
データの取得(SELECT)
import pymysql
# データベースへの接続を確立
db_conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='admin',
password='secret',
database='sample_db',
charset='utf8mb4'
)
# カーソルの取得
cur = db_conn.cursor()
# クエリの実行
query = "SELECT id, name FROM employees;"
affected_rows = cur.execute(query)
print(f"取得したレコード数: {affected_rows}")
# 全件取得して出力
for row in cur.fetchall():
print(row)
# リソースの解放
cur.close()
db_conn.close()
データの更新・挿入・削除(INSERT / UPDATE / DELETE)
import pymysql
# データベースへの接続を確立
db_conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='admin',
password='secret',
database='sample_db',
charset='utf8mb4'
)
cur = db_conn.cursor()
try:
# 更新クエリの実行例
update_query = "UPDATE employees SET name = 'Taro Yamada' WHERE id = 5;"
affected_rows = cur.execute(update_query)
print(f"影響を受けた行数: {affected_rows}")
# トランザクションのコミット
db_conn.commit()
except Exception as err:
print(f"エラー発生: {err}")
# 処理に失敗した場合はロールバック
db_conn.rollback()
finally:
# リソースの解放
cur.close()
db_conn.close()
PyMySQLではデータの変更操作はトランザクション内で実行されるため、変更を確定するには必ずcommit()を呼び出す必要があります。エラーが発生した場合はrollback()を実行し、操作前の状態に戻すことが重要です。