PythonでMySQLを扱う方法とは?基本的な使い方や例外処理などを紹介!

エンジニア
マネージャー
PythonでMySQLを扱う方法とは?
今回は、PythonでMySQLを扱う方法について説明します。ここでは、基本的な使い方から、SQLの実行結果を保存する方法、例外処理などを紹介します。
前提条件として、MySQLはインストール済みとします。
PythonでMySQLを扱う方法に興味のある方はぜひご覧ください。
事前準備
事前準備として、mysqlclient(接続用のドライバ)を導入します。以下のコマンドを実行します。
1 |
~$ pip install mysqlclient |
これでPythonでMySQLを扱う準備ができます。
データベースは事前に作成しておいてください。ここでは、「mydb」というデータベースにmyuserというテーブルを作成しておきます。
1 2 3 4 5 6 7 8 9 |
mysql> desc myuser; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | YES | | NULL | | | age | int(11) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ |
myuserテーブルには、以下のレコードが格納されているとします。
1 2 3 4 5 6 7 8 9 10 |
mysql> select * from myuser; +----+--------+------+------------------+ | id | name | age | email | +----+--------+------+------------------+ | 1 | ichiro | 20 | ichiro@email.com | | 2 | jiro | 30 | jiro@email.com | | 3 | saburo | 24 | saburo@email.com | | 4 | shiro | 18 | shiro@email.com | | 5 | goro | 37 | goro@email.com | +----+--------+------+------------------+ |
基本的な使い方
PythonからMySQLに接続して、レコードを取得してみます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import MySQLdb # MySQLに接続 conn = MySQLdb.connect( user='root', passwd='自分の環境のパスワード', host='localhost', db='mydb') # カーソルを取得 cur = conn.cursor() # SQL文を実行 sql = "select * from myuser" cur.execute(sql) # 実行結果を取得 rows = cur.fetchall() # 実行結果を表示 for row in rows: print(row) # 接続をクローズ cur.close conn.close |
実行結果は以下のようになります。
1 2 3 4 5 |
(1, 'ichiro', 20, 'ichiro@email.com') (2, 'jiro', 30, 'jiro@email.com') (3, 'saburo', 24, 'saburo@email.com') (4, 'shiro', 18, 'shiro@email.com') (5, 'goro', 37, 'goro@email.com') |
PythonからMySQLに接続して、レコードを取得できていることが分かります。
SQLの実行結果を保存
PythonからMySQLのテーブルを更新する方法を紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import MySQLdb # MySQLに接続 conn = MySQLdb.connect( user='root', passwd='自分の環境のパスワード', host='localhost', db='mydb') # カーソルを取得 cur = conn.cursor() # SQL文を実行 sql = "update myuser set age = 10 where id = 1" cur.execute(sql) # SQLの実行結果を保存 conn.commit() # 接続をクローズ cur.close conn.close |
conn.commit()を実行しないと、SQLの実行結果が保存されませんので注意してください。
MySQLのターミナルで更新されたことを確認してみます。
1 2 3 4 5 6 |
mysql> select * from myuser where id = 1; +----+--------+------+------------------+ | id | name | age | email | +----+--------+------+------------------+ | 1 | ichiro | 10 | ichiro@email.com | +----+--------+------+------------------+ |
update文が成功していることが分かります。
例外処理
PythonからMySQLを扱う際には、例外処理を入れておいたほうが良いです。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import MySQLdb # MySQLに接続 conn = MySQLdb.connect( user='root', passwd='自分の環境のパスワード', host='localhost', db='mydb') # カーソルを取得 cur = conn.cursor() try: # SQL文を実行 sql = "update myuser set age = 20 where id = 1" cur.execute(sql) # わざと失敗するようにSQL文を実行(主キーの重複) sql = "insert into myuser (id, name, age, email) values (1, 'ichiro', 20, 'ichiro@email.com')" cur.execute(sql) # SQLの実行結果を保存 conn.commit() except MySQLdb.Error as e: print('MySQLdb.Error: ', e) # 接続をクローズ cur.close conn.close |
実行結果は以下のようになります。主キーの重複エラーが表示されています。
1 |
MySQLdb.Error: (1062, "Duplicate entry '1' for key 'PRIMARY'") |
MySQLのターミナルで確認すると、レコードは更新されていないことが分かります。commit()の前に例外をキャッチしたので、SQLの実行結果が保存されていません。
1 2 3 4 5 6 |
mysql> select * from myuser where id = 1; +----+--------+------+------------------+ | id | name | age | email | +----+--------+------+------------------+ | 1 | ichiro | 10 | ichiro@email.com | +----+--------+------+------------------+ |
SQL文に変数を使用する
PythonからMySQLを扱う際に、SQL文に変数を使用する方法を紹介します。executeに引数を指定します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import MySQLdb # MySQLに接続 conn = MySQLdb.connect( user='root', passwd='自分の環境のパスワード', host='localhost', db='mydb') # カーソルを取得 cur = conn.cursor() try: # SQL文に使用する変数 id = 1 name = 'ichiro2' # SQL文を実行 sql = "update myuser set name = %s where id = %s" cur.execute(sql, (name, id)) # SQLの実行結果を保存 conn.commit() except MySQLdb.Error as e: print('MySQLdb.Error: ', e) # 接続をクローズ cur.close conn.close |
実行後にMySQLのターミナルで確認すると、レコードが更新されていることが分かります。
1 2 3 4 5 6 |
mysql> select * from myuser where id = 1; +----+---------+------+------------------+ | id | name | age | email | +----+---------+------+------------------+ | 1 | ichiro2 | 10 | ichiro@email.com | +----+---------+------+------------------+ |
エンジニア
マネージャー
まとめ
いかがでしたでしょうか。PythonでMySQLを扱う方法について紹介しました。
MySQL接続ドライバのインストール方法から、基本的な使い方、SQLの実行結果を保存する方法、例外処理などを紹介しました。
ぜひご自身でPythonのソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)