★悩み★
・PythonからMySQLのデータ取得ってできるのかな?
・PythonからMySQLに対して「select」の実行ってできるのかな?
・PythonでMySQLからデータ取得(select)する手順を知りたい。
こういった「悩み」に答えます。
★本記事の内容★
➀ PythonでMySQLからデータ取得(select)するための準備
➁ PythonでMySQLからデータ取得(select)する手順
➂ 応用:プリペアドステートメントを使いPythonでMySQLからデータ取得
これからご紹介する「【コピペOK】PythonでMySQLからデータ取得(select)する手順」を実践したことで、筆者は10分以内でPythonを用いてMySQLからデータ取得(select)できました。
記事の前半では「PythonでMySQLからデータ取得(select)するための準備」をコマンドベースで紹介します。
記事の後半では「PythonでMySQLからデータ取得(select)する手順」を紹介します。
この記事を読み終えることで、「PythonでMySQLに格納されたデータを取得できる」状態になります。
ちなみに、「PythonでMySQLにデータ追加(insert)する手順を知りたい」方は、以下の記事をご覧ください。
PythonでMySQLからデータ取得(select)するための準備
「PythonでMySQLからデータ取得(select)するための準備」に関してご紹介します。
★PythonでMySQLからデータ取得(select)するための準備★
手順1:Pythonの「mysqlclient」ライブラリをインストール
手順2:MySQLのインストールとセットアップ
手順3:MySQLにinsertでデータを追加
上記の流れで、「PythonでMySQLからデータ取得(select)するための準備」ができます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年8月3日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「PythonでMySQLからデータ取得(select)するための準備」の各手順に関してご説明します。
手順1:Pythonの「mysqlclient」ライブラリをインストール
「手順1:Pythonの「mysqlclient」ライブラリをインストール」に関してご説明します。
Pythonのmysqlclientライブラリを利用することで、PythonからMySQLを簡単に操作(データ追加や削除など)できます。
「mysqlclientライブラリのインストール手順」に関しては、以下の記事をご覧ください。
既にmysqlclientライブラリをインストールされている方は、本手順を省略してください。
以上で、「手順1:Pythonの「mysqlclient」ライブラリをインストール」は完了です。
手順2:MySQLのインストールとセットアップ
「手順2:MySQLのインストールとセットアップ」に関してご説明します。
PythonでMySQLからデータ取得(select)するためにも、MySQLのインストールとセットアップをしましょう。
「MySQLのインストールとセットアップ手順」に関しては、以下の記事をご覧ください。
既にMySQLをインストール・セットアップされている方は、本手順を省略してください。
以上で、「手順2:MySQLのインストールとセットアップ」は完了です。
手順3:MySQLにinsertでデータを追加
「手順3:MySQLにinsertでデータを追加」に関してご説明します。
Pythonからデータ取得(select)したい「データ」をMySQLのテーブルに追加しましょう。
「MySQLにinsertでデータを追加する手順」に関しては、以下の記事をご覧ください。
既にMySQLにデータが追加されている場合、本手順を省略してください。
以上で、「手順3:MySQLにinsertでデータを追加」は完了です。
上記の流れで、PythonでMySQLからデータ取得(select)するための準備ができました。
PythonでMySQLからデータ取得(select)する手順
「PythonでMySQLからデータ取得(select)する手順」に関してご紹介します。
★PythonでMySQLからデータ取得(select)する流れ★
手順1:PythonでMySQLからデータ取得(select)するプログラムを作成
手順2:「MySQLからデータ取得(select)するPythonプログラム」の動作確認
上記の流れで、「PythonでMySQLからデータ取得(select)」できます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年8月3日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「PythonでMySQLからデータ取得(select)する流れ」の各手順に関してご説明します。
手順1:PythonでMySQLからデータ取得(select)するプログラムを作成
「手順1:PythonでMySQLからデータ取得(select)するプログラムを作成」に関してご説明します。
「MySQLからデータ取得(select)する」Pythonのプログラムを作成しましょう。
「MySQLからデータ取得(select)する」Pythonのプログラムは、以下となります。プログラム中の「適宜変更」と書いてある部分は、自分用に書き換えてください。
import MySQLdb
def db_select_sample():
""" データ取得(select)のサンプル """
# MySQLに接続
connector = MySQLdb.connect(
user='XXXX', # MySQLのユーザー名(適宜変更)
passwd='YYYY', # MySQLのパスワード(適宜変更)
host='localhost', # MySQLが稼働しているホスト名(適宜変更)
db='testdb', # 接続したいMySQL内のデータベース名(適宜変更)
charset="utf8")
# カーソルを取得
cur= connector.cursor()
# データ取得クエリ(select)を実行
sql = "select id,name,address from user"
cur.execute(sql)
# 実行結果をすべて取得
rows = cur.fetchall()
# 一行ずつ表示
for row in rows:
print(row)
# 行数をカウントして表示
cur.execute('select count(*) from user')
for row in cur.fetchall():
print(row)
cur.close()
connector.close()
print("MySQLからデータ取得(select)できました。")
if __name__ == "__main__":
db_select_sample()
上記のプログラムを「python-mysql-select.py」というファイル名で保存しましょう。
ちなみに、「selectの構文を知りたい」方は、以下の記事をご覧ください。
以上で、「手順1:PythonでMySQLからデータ取得(select)するプログラムを作成」は完了です。
手順2:「MySQLからデータ取得(select)するPythonプログラム」の動作確認
「手順2:「MySQLからデータ取得(select)するPythonプログラム」の動作確認」に関してご説明します。
Pythonで作成した「MySQLからデータ取得(select)する」プログラムの動作を確認しましょう。
Pythonで作成した「MySQLからデータ取得(select)する」プログラムの動作を確認するために、以下のコマンドを実行してください。
# python mysql-select.py
(1, 'hero', 'kakedashi')
(2, 'tom', 'america')
(3, 'bob', 'america')
(4, 'ken', 'japan')
(4,)
MySQLからデータ取得(select)できました
コマンド実行後、「MySQLからデータ取得(select)できました」が表示された場合、「正常にPythonでMySQLからデータ取得(select)できた」と判断できます。
以上で、「手順2:「MySQLからデータ取得(select)するPythonプログラム」の動作確認」は完了です。
上記の流れで、PythonでMySQLからデータ取得(select)できました。
応用:プリペアドステートメントを使いPythonでMySQLからデータ取得
「応用:プリペアドステートメントを使いPythonでMySQLからデータ取得」に関してご紹介します。
★プリペアドステートメントを使ったデータ取得★
・プリペアドステートメントとは?
・where句を使ったデータ取得
・like句を使ったデータ取得
以降で、各項目を説明します。
プリペアドステートメントとは
プリペアドステートメントは、以下のような定義です。
★プリペアドステートメントの定義★
プリペアドステートメントとは、プログラム上で動的にSQL文を生成する必要があるとき、可変部分を変数のようにしたSQL文をあらかじめ作成しておき、値の挿入は処理系に行わせる方式。
出典:プリペアドステートメント【prepared statement】(IT用語辞典)
プリペアドステートメントを使うと以下のメリットがあります。
★プリペアドステートメントの利点★
・クエリ実行するためのオーバーヘッドが少なくなる
・SQL インジェクション攻撃からの保護ができる
参照:プリペアドステートメント(MySQLの公式リファレンス)
以降で、プリペアドステートメントをPython上で使ってMySQLからデータ取得してみましょう。
where句を使ったデータ取得
プリペアドステートメントを使ったwhere句によるデータ取得は、以下のプログラムで実現できます。
import MySQLdb
def db_select_sample():
""" データ取得(select)のサンプル """
# MySQLに接続
connector = MySQLdb.connect(
user='XXXX', # MySQLのユーザー名(適宜変更)
passwd='YYYY', # MySQLのパスワード(適宜変更)
host='localhost', # MySQLが稼働しているホスト名(適宜変更)
db='testdb', # 接続したいMySQL内のデータベース名(適宜変更)
charset="utf8")
# カーソルを取得、プリペアドステートメントを使うために「prepared=True」を指定
cur= connector.cursor(prepared=True)
# where句を使ったデータ取得クエリ(select)を定義
sql = "select id,name,address from user where name = ?"
# 定義したクエリに条件を設定
cur.execute(sql, ("hero", ))
# 実行結果をすべて取得
rows = cur.fetchall()
# 一行ずつ表示
for row in rows:
print(row)
cur.close()
connector.close()
print("like句を使ったプリペアドステートメントを実行しました。")
if __name__ == "__main__":
db_select_sample()
上記プログラムを「preparedstatement-where.py」というファイル名で保存し、以下のコマンドで実行しましょう。
# python preparedstatement-where.py
(1, 'hero', 'kakedashi')
where句を使ったプリペアドステートメントを実行しました。
コマンド実行後、「where句を使ったプリペアドステートメントを実行しました。」が表示された場合、「正常にwhere句を使ったプリペアドステートメントによりデータ取得(select)できた」と判断できます。
like句を使ったデータ取得
プリペアドステートメントを使ったlike句によるデータ取得は、以下のプログラムで実現できます。
import MySQLdb
def db_select_sample():
""" データ取得(select)のサンプル """
# MySQLに接続
connector = MySQLdb.connect(
user='XXXX', # MySQLのユーザー名(適宜変更)
passwd='YYYY', # MySQLのパスワード(適宜変更)
host='localhost', # MySQLが稼働しているホスト名(適宜変更)
db='testdb', # 接続したいMySQL内のデータベース名(適宜変更)
charset="utf8")
# カーソルを取得、プリペアドステートメントを使うために「prepared=True」を指定
cur= connector.cursor(prepared=True)
# like句を使ったデータ取得クエリ(select)を定義
sql = "select id,name,address from user where name like ?"
# 定義したクエリに条件を設定(部分一致)
cur.execute(sql, ("%e%", ))
# 実行結果をすべて取得
rows = cur.fetchall()
# 一行ずつ表示
for row in rows:
print(row)
cur.close()
connector.close()
print("like句を使ったプリペアドステートメントを実行しました。")
if __name__ == "__main__":
db_select_sample()
上記プログラムを「preparedstatement-like.py」というファイル名で保存し、以下のコマンドで実行しましょう。
# python preparedstatement-like.py
(1, 'hero', 'kakedashi')
(4, 'ken', 'japan')
like句を使ったプリペアドステートメントを実行しました。
コマンド実行後、「like句を使ったプリペアドステートメントを実行しました。」が表示された場合、「正常にlike句を使ったプリペアドステートメントによりデータ取得(select)できた」と判断できます。
セキュリティ事故を防ぐためにもプリペアドステートメントの利用を検討してみてください。
ちなみに、「PythonでMySQLを操作する方法を体系的に学びたい」方は、以下の参考書がオススメです。
【まとめ】PythonでMySQLからデータ取得(select)する手順
今回の記事を通して、「【コピペOK】PythonでMySQLからデータ取得(select)する手順」をご紹介することで、以下の悩みを解消しました。
★悩み★
・PythonからMySQLのデータ取得ってできるのかな?
・PythonからMySQLに対して「select」の実行ってできるのかな?
・PythonでMySQLからデータ取得(select)する手順を知りたい。
「PythonでMySQLからデータ取得(select)する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント