【 Python 】mysql-connector-pythonでMySQLにアクセスしよう!

当ページのリンクには広告が含まれています。

今回はPythonからMySQLデータベースに接続し、データを更新したり取得する方法について解説します。

MySQL は無料で使える本格的なデータベースであり、商用利用も盛んにされていますので、仕事で必要に迫られるケースも多いと思います。

少し前までは mysqlclient が有名でしたが、Windowsではサポートされなくなっており、2024年9月においては
mysql-connector-python がよく使われています。

そこで、本記事では Windows上で mysql-connector-python を使って PythonからMySQLに接続する方法を、サンプルソース付きで解説致します。

【 コピペでOK】9割の機能を網羅!PytonからMySQLを扱うクラスを作ってみました。」では、本記事の内容をもとに、MySQLで便利な自作クラスを紹介していますので、興味のある方は併せてご覧ください。

あわせて読みたい
【 コピペでOK】9割の機能を網羅!PytonからMySQLを扱うクラスを作ってみました。 【 Python 】mysql-connector-pythonでMySQLにアクセスしよう!の記事では、Python から MySQLに接続するための方法について解説しました。 https://resanaplaza.com/20...
目次

mysql-connector-python インストール

コマンドプロンプトから、pipコマンドで mysqlclientをインストールします。

pip install mysql-connector-python

mysql-connector-pythonの概要

SQLやDDLを実行するための手順は、SQLite、Oracle、PostgreSQL など多くのデータベースと同様です。

尚、インストールは mysqlclient ですが、 import は MySQLdb なのでご注意ください。

import MySQLdb

 

mysql-connector-pythonの使い方

MySQL への接続

MySQLへの接続には、mysql.connector.connect メソッドに接続に必要な接続情報を引数として渡します。
また、処理が終れば close() メソッドを使って接続を切断しておきます。

# モジュールのインポート
import mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(host='dbserver',user='mining', database='mining',password='mining')

# ~ここに処理を書く~

# MySQLへの接続を切断
conn.close()
引数名内容補足説明
hostサーバー名IPアドレス(例:192.168.0,110) 又はホスト名(例:'hoge')
databaseデータベース名
userユーザー名
passwordパスワード
portポート番号省略時は3306が設定される

他のDatabaseでは、接続文字列(接続情報を繋げて1つの文字列にしたもの)が使えるものも多いですが、mysql-connector-pythonは接続文字列をサポートしていません。

テーブルの作成と削除

テーブルの作成や削除、インデックスの追加、カラム名の変更など、いわゆる定義系のSQL(DDL=Data Definition Language)は、execute メソッドを使います。

execute メソッドを使うには、DBに接続後にカーソルを取得する必要があるため、結果的に下記の様になります。

# MySQLへの接続
conn = mysql.connector.connect(host='dbserver',user='mining', database='mining',password='mining')

# カーソルを取得
cur = conn.cursor()

#任意のDDL(Createなど)を実行
cur.execute('~任意のDDL文~')

# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()

例えば、新しいテーブルを作成する場合は、次のように記述します。

# モジュールのインポート
import mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(host='dbserver',user='mining', database='mining',password='mining')

# create 文の作成
sql_statement = """
    CREATE TABLE hoge (
        id VARCHAR(5) NOT NULL,
        name VARCHAR(20),
        age INT,
        create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (id)
    );
"""

# カーソルを取得し、Select文を実行後、結果を取得する
cur = conn.cursor()
cur.execute(create_statement )

# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()

テーブルを削除する場合は、sql_statement を次の内容に変更します。

sql_statement = """
    DROP TABLE IF EXISTS hoge;
"""

データの挿入と更新

データを挿入する場合も基本的にはDDLと同じく、execute メソッドを使います。
異なるのは、データの更新を確定させるために、commitメソッドを呼ぶ必要があることです。これをしないと、いくらテーブルを更新しても結果が反映されません。

# モジュールのインポート
import mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(host='dbserver',user='mining', database='mining',password='mining')
cur = conn.cursor()

# インサート文の実行
cur.execute("insert into hoge(id,name,age) values('A1001','山田',30)")
cur.execute("insert into hoge(id,name,age) values('A1002','鈴木',45)")
cur.execute("insert into hoge(id,name,age) values('A1003','斉藤',29)")

# 更新内容の確定(コミット)
conn.commit()

# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()

executeの引数を update文 に換えると、指定した条件のデータを更新(アップデート)できます。

cur.execute("update hoge set age=50 where id='A1001'")

検索(Select)と結果の取得

データを検索する場合も同様、execute メソッドを使います。
また、fetchall メソッドを使って検索結果を受け取ります。

# モジュールのインポート
mport mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(host='dbserver',user='mining', database='mining',password='mining')

# カーソルを取得し、Select文を実行後、結果を取得する
cur = conn.cursor()
cur.execute('select * from hoge')
res = cur.fetchall()

# 取得した結果をプリント
print(res)

# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()

fetchall は検索結果を全てメモリに読み込むため、大量のデータを受け取る場合はメモリ不足のエラーが発生します。
そのため、検索結果を1件づつ読み出す fetchoneメソッドや、指定した件数毎に結果を受け取れる fetchmanyメソッドが用意されています。

機能メソッド備考
全件取得fetchall()リスト形式で全件を返す。
1件づつ取得fetchone()データがあれば1件をタプル形式で返す。
データが無くなれば None を返す。
指定件数づつ取得fetchmany(件数)データがあれば指定件数づつタプル形式で返す。
データが無くなれば None を返す。

以下は、fetchmany を使ったサンプルです。2件づつデータを読み取りながらループしていますが、書き方が2通りあるため、参考に載せておきます。

# モジュールのインポート
import mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(
    host='dbserver',
    user='mining', 
    database='mining',
    password='mining')

# カーソルを取得し、Select文を実行後、結果を取得する
cur = conn.cursor()
cur.execute('select * from hoge')

res = cur.fetchmany(2)
while res:
    print(res)
    res = cur.fetchmany(2)
    
# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()
# モジュールのインポート
import mysql.connector

# MySQLへの接続
conn = mysql.connector.connect(
    host='dbserver',
    user='mining', 
    database='mining',
    password='mining')

# カーソルを取得し、Select文を実行後、結果を取得する
cur = conn.cursor()
cur.execute('select * from hoge')

while True:
    res = cur.fetchmany(2)
    if res == []:
        break 
    print(res)
    
# カーソルとコネクションをクローズ(解放)
cur.close()
conn.close()

まとめ

今回は Python を使って MySQL に接続するために必要な mysql-connector-python のインストール方法 と、 MySQL に接続した後にデータの抽出や更新を行うための簡単なサンプルを紹介しまた。

Pythonのデータベース接続は、データベースの種類によってコネクションの部分が多少異なるものの、接続後の手順は同じです。

この記事がPythonで MySQL に接続するための参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次