【コピペOK】PythonでMySQLからデータ取得(select)する手順

 

★悩み★
・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)する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント