python mysqlでselectを実行してデータを取得する

python mysqlでselectを実行してデータを取得する

pythonで、mysqlでselectを実行してデータを取得するサンプルコードを記述してます。pythonのバージョンは3.9.7を使用してます。

環境

  • OS windows 11 Home
  • python 3.9.7

mysql-connector-pythonインストール

ライブラリ「mysql-connector-python」を使用するのでインストールしてない場合は、
「pip」を使ってインストールします。

pip install mysql-connector-python

サンプルコード

localhostにある「mysql」に接続して、以下の構成のテーブル「foo」のデータを取得します。

テーブル「foo」

selectを実行してデータを取得します。

import mysql.connector

# 接続情報を記述
conn = mysql.connector.connect(
    host='localhost', 
    port='3306', 
    user='root', 
    password='password',
    database='hoge',
)

# 接続状況確認
if conn.is_connected():
    try:
        # 再接続を行うように設定
        conn.ping(reconnect=True)

        # カーソル作成
        cr = conn.cursor()

        # クエリを作成
        sql = ('''
            SELECT  *
            FROM    foo
        ''')  
              
        # selectを実行
        cr.execute(sql)
        
        # 全データ取得
        rows = cr.fetchall()
        
        # 実行結果
        print(f'{cr.rowcount} 件取得しました。')
        
        # データを表示
        for row in rows:
            print(row)
                
    except mysql.connector.Error as e:
                
        print(e)
        
    finally:
        # クローズ
        if cr is not None:
            cr.close()
        if conn is not None and conn.is_connected():
            conn.close()
else:

    exit()

実行結果を見ると、データが取得されていることが確認できます。

カラム別に取得

カラム別に取得したい場合は、カーソル作成時に「dictionary=True」を指定します。

# カーソル作成
cr = conn.cursor(dictionary=True)

# データを表示
for row in rows:
    print(row["id"],row["name"])

実行結果

where句を使用

where句は、以下のように使用することができます。

import mysql.connector

# 接続情報を記述
conn = mysql.connector.connect(
    host='localhost', 
    port='3306', 
    user='root', 
    password='password',
    database='hoge',
)

# 接続状況確認
if conn.is_connected():
    try:
        # 再接続を行うように設定
        conn.ping(reconnect=True)

        # カーソル作成
        cr = conn.cursor(dictionary=True)

        # クエリを作成
        sql = ('''
            SELECT  *
            FROM    foo
            WHERE   id = %s
        ''')
        
        # where句のデータを指定
        param = (1,)
              
        # selectを実行
        cr.execute(sql,param)
        
        # 全データ取得
        rows = cr.fetchall()
        
        # 実行結果
        print(f'{cr.rowcount} 件取得しました。')
        
        # データを表示
        for row in rows:
            print(row["id"],row["name"])
                
    except mysql.connector.Error as e:
                
        print(e)
        
    finally:
        # クローズ
        if cr is not None:
            cr.close()
        if conn is not None and conn.is_connected():
            conn.close()
else:

    exit()

実行結果