今回はPythonからMySQLデータベースに接続し、データを更新したり取得する方法について解説します。
MySQL は無料で使える本格的なデータベースであり、商用利用も盛んにされていますので、仕事で必要に迫られるケースも多いと思います。
MySQL データベースに関して基本的な知識があり、Pythonから接続する方法を知りたいという方が対象の記事になっています。
接続する前の準備
Python から MySQL に接続するには、次の手順が必要です。
- mysqlclientパッケージのインストール
- Pythonプログラム上で mysqlclientのインポート
尚、mysqlclientのパッケージは、他の開発ツールのインストールによって、既にインストール済みの場合があります。
pyodbc のインストール
Python公式サイトからPythonをダウンロードして使っている方は、DOSプロンプトから下記コマンドを実行します。
1 |
pip install mysqlclient |
2021年9月現在において、Anacondaではインストールできませんでした。
1 |
conda install mysqlclient <-- ライブラリが見つからない |
上記でインストールできない場合は、mysqlclientの公式サイト から whl をダウンロードし、pip コマンドでインストールします。

2021年9月現在では、下記のパッケージ(64ビット版)が最新です。
mysqlclient‑1.4.6‑cp**‑cp**‑win_amd64.whl
** の部分は対応しているPythonのバージョンであり、自分が使用しているPythonのバージョンより下位であれば(例えばPythonが3.9の場合、psycopy2は3.9,3.8,3.7,3.6)、どれを選んでも接続できるようです。
ダウンロードしたら、pip install ファイル名 でインストールします。
例えば、 C:\Downloads にダウンロードした場合、次の様になります。
1 |
pip install C:\Downloads\mysqlclient‑1.4.6‑cp38‑cp38‑win_amd64.whl |
MySQL に接続し、SQLを実行するための手順
SQLやDDLを実行するための手順は、SQLite、Oracle、PostgreSQL など多くのデータベースと同様です。
尚、インストールは mysqlclient ですが、 import は MySQLdb なのでご注意ください。
1 |
import MySQLdb |

MySQL への接続
MySQL に接続するためには、下記の仕様で接続文字列を作成し、connectメソッドに渡す必要があります。
PostgreSQLとよく似ていますが、データベースとパスワードの指定が少し異なります。
host=’xxx’ port=xxx db=xxx user=xxx passwd=’xxx’
XXXの部分は、 接続先のサーバー名、ポート番号 、データベース名、ユーザー名、パスワードに置き換えてください。
例えば、 サーバー名=’myserver’、ポート番号=3306、データベース名=’mydatabase’、ユーザーID=’yamada’、パスワード=’hoge1234′ の場合は次のようになります。
1 |
host='myserver' port=3306 db=mydatabas user=yamada passwd='hoge1234' |
ちなみに、 MySQL のデフォルトのポートは 3306なので、接続先のポートが変わっていなければ、port引数は省略可能です。
接続文字列が完成したら、connect メソッドの引数に指定することで、 MySQL に接続出来るようになります。

1 2 3 4 |
#MySQL接続のサンプル import MySQLdb constr = "host='myserver' port=3306 db=mydatabas user=yamada passwd='hoge1234'" conn = MySQLdb.connect(constr) |
データの取得
MySQL に対して select 文を発行し、データを取得する方法は次のようになります。

fetch は次の3種類が用意されており、状況に応じて使い分けます。
機能 | メソッド | 備考 |
---|---|---|
全件取得 | fetchall() | リスト形式で全件を返す。 |
1件づつ取得 | fatchone() | データがあれば1行をタプル形式で返す。 データが無くなれば None を返す。 |
指定件数づつ取得 | fetchmeny(件数) |
下記は MySQL に接続し、条件に一致したデータを全件取得するサンプルです。
1 2 3 4 5 6 7 8 9 10 |
import MySQLdb constr = "host='myserver' port=3306 db=mydatabas user=yamada passwd='hoge1234'" conn = MySQLdb.connect(constr) cur = conn.cursor() cur.execute('select * from hoge where id >= 10000') res = cur.fetchall() print(res) cur.close() conn.close() |
データの更新、DDLの実行
データの更新やDDLの実行は下記のようになります。

トランザクションについては、最初のSQL実行時に自動で開始されますので、特に明記する必要はありません。
何らかの事情で明示的に記述が必要な場合、conn.begin() と記述します。
トランザクションを確定させるには conn.commit() 、トランザクションを無効にしたい場合には conn.rollback() メソッドを呼び出します。
DDLはロールバックが出来ないため、commit() は不要ですが、commit() をしても特にエラーにはなりません。
下記はinsertのサンプルです。
1 2 3 4 5 6 7 8 9 10 11 |
import MySQLdb constr = "host='myserver' port=3306 db=mydatabas user=yamada passwd='hoge1234'" conn = MySQLdb.connect(constr) cur = conn.cursor() cur.execute('insert into hoge(id,tag,cost) values('10001','ABCD',120)' cur.execute('insert into hoge(id,tag,cost) values('10002','BCDE',250)' cur.execute('insert into hoge(id,tag,cost) values('10003','CDEF',380)' conn.commit() cur.close() conn.close() |
下記はDDLのサンプルです。
1 2 3 4 5 6 7 8 |
import MySQLdb constr = "host='myserver' port=3306 db=mydatabas user=yamada passwd='hoge1234'" conn = MySQLdb.connect(constr) cur = conn.cursor() cur.execute('create table mage(startday timestamp,item varchar2(100),val number(10,2))') cur.close() conn.close() |
まとめ
今回は Python を使って MySQL に接続するために必要なmysqlclientのインストール方法 と、 MySQL に接続した後にデータの抽出や更新を行うための簡単なサンプルを紹介しまた。
Pythonのデータベース接続は、データベースの種類によってコネクションの部分が多少異なるものの、接続してしまえば後の手順(データ抽出、データ更新、DDL発行)は同じです。
この記事がPythonで MySQL に接続するための参考になれば幸いです。