※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


【Python3】PyMySqlを使ってMySQLを操作(基礎・使用例)

python3 python データベース PyMySQL MySQL

投稿日:2020年11月16日

このエントリーをはてなブックマークに追加
PyMySQLはMySQLをPythonから操作するクライアントライブラリの一つです。この記事ではPyMySQLの使い方の基礎とユースケースについて解説しています。

実践

実験環境

実験環境としてDockerコンテナでmysql環境を作成します。

作成にはDockerDocker Composeのインストールが必要になります。

すでに独自のMySQL環境がある方は無視して次の実践(基礎)に進んでください。

docker-compose.yml
version: "3"

services:
    mysql:
        image: mysql:5.7
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: mydb 
        ports:
            - 3306:3306

上記ファイルを作成してDocker Composeからコンテナを作成させましょう。

ターミナル
$ sudo docker-compose up -d

作成した環境の内容としては重要な点は以下のとおりです。

  • MySQL Version 5.7
  • rootユーザーのパスワードはroot
  • 起動時にmydbというデータベースを作成
  • ポートフォワーディングでローカルの3306ポートにバインド

実践(基礎)

まずはPyMySQLをインストールします(各自の環境に合わせてsudoを付けたりpip3に変えたりしてね)。

ターミナル
$ pip install pymysql

では実際にコードに入っていきます。

ここではローカルのPythonインタプリタでからの実行を前提に一行ずつ説明していきます。

まずはライブラリをimportします。

import pymysql

MySQLの接続情報を元にpymysql.connect()メソッドでMySQLへのコネクションを作成します。

必須な引数は以下のとおりです。

  • host: MySQLサーバーのホスト。今回はサーバーをlocalhost127.0.0.1)に作成しましたが、リモートにあるときにはそのIPアドレス、またはホスト名を指定します。
  • port : MySQLサーバーのポート。デフォルトでは3306で起動しています。今回もdocker-compose.yml3306でポート指定したので3306ですね。
  • user サーバーへの接続ユーザーです。今回はサンプルのため、rootを使用しますが、本番サーバーでrootで接続することは非常に危険なので気をつけましょう。
  • password : サーバーの接続ユーザーに設定されたパスワードです。今回はrootのパスワードはrootですね。

また、今回はデータベースでmydbを使用します。

使用データベースはオプションのdb引数にデータベース名を指定します。

connection = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='mydb')

Cursor Objectを作成します。

Cursor Objectは実際にデータベースを管理するオブジェクトになります。

cursor = connection.cursor()

カーソルが作成できたら、SQLを実行しましょう。

cursorのexecute()メソッドでSQL文の実行ができます。メソッドの返り値はSQLの実行に際し変更された行数が返ります。

cursor.execute("CREATE TABLE sample_tbl (id int, firstname varchar(255), lastname varchar(255));")

今回はテーブルの作成なのでデータの取得などはありませんが、データの取得がある場合にはfetchone()fetchall()などのメソッドでデータの取得をしましょう。

cursor.fetchone()

デフォルトではAUTO_COMMIT=Falseになっているため、SQLの実行の反映には手動でのCOMMITが必要になります。

COMMITConnectioncommit()メソッドで実行できます。

connection.commit()

ソケットを閉じて終了するにはConnectionclose()メソッドを呼びます。

connection.close()

実際のコードの場合、コードが途中終了した場合などにcursorのclose()やconnectionのclose()を呼び忘れないようにする必要があります。

その実装の方法は有名所で2つあるので下に例を載せておきます。

実装例その1
import pymysql

connection = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='mydb')

try:
    with connection.cursor() as cursor:
        sql = "INSERT INTO sample_tbl (id, firstname, lastname) VALUES (1, 'mars', 'quai');"
        cursor.execute(sql)
        connection.commit()
finally:
    connection.close()
実装例その2
import pymysql, contextlib

connection = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='mydb')

with contextlib.closing(connection):
    with connection.cursor() as cursor:
        sql = "INSERT INTO sample_tbl (id, firstname, lastname) VALUES (1, 'mars', 'quai');"
        cursor.execute(sql)
        connection.commit()

さいごに

参考URL

このエントリーをはてなブックマークに追加


関連記事

記事へのコメント