footmark

ひよっこエンジニアの足跡

【mysql-connector-python】PythonからMySQLを操作する

PythonMySQLドライバ、mysql-connector-pythonを使っていて躓いたので、その備忘録も兼ねて紹介します。

PythonMySQLを操作しようと思ったら

まずドライバをインストールしなければいけません。
いろんな種類があり、紹介マニアどらふと版: Python の MySQL ドライバはどれを利用すれば良いのか に分かりやすくまとめられています。

僕はmysql-connector-pythonをチョイスしました。
特徴はMySQL公式のドライバだという点ですね。
公式がいいのか!と言われるとケースバイケースだと思いますが、最近使っているMySQL Workbenchという公式のGUIツールが使いやすかったので。

インストール

pipでいけます。

$ pip install mysql-connector-python

基本的な使い方

次のようなデータをinsertし、それをselectするコードを書いてみます。
(テーブルは作成済みとする)

student_id name sex
1 山田太郎


test.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# ドライバをimport
import mysql.connector

if __name__ == '__main__':
    # データベースに接続
    connect = mysql.connector.connect(user='hoge', password='hoge', host='hoge', database='hoge', charset='utf8')
    cursor = connect.cursor()

    name = '山田太郎'
    sex = '男'

    # insert
    cursor.execute('insert into student_table (name, sex) values (%s, %s)', (name, sex))

    # select
    cursor.execute('select * from student_table')
    row = cursor.fetchone()

    # 出力
    for i in row:
        print(i)

    # データベースから切断
    cursor.close()
    connect.close()


実行結果

$ python test.py
1
山田太郎
男


今回はレコードを1つinsertし、それをselectするというものだったのでfetchone 関数を使いましたが、複数のレコードを取得したい場合はfetchall 関数を使います。

# select
cursor.execute('select * from student_table')
rows = cursor.fetchall()

# 出力
for i in rows:
    print(i[0])
    print(i[1])
    print(i[2])

詰まったところ

上のコードでも使った

# insert
cursor.execute('insert into student_table (name, sex) values (%s, %s)', (name, sex))


execute 関数の第1引数内の変数を %s とし、第2引数に変数を入れることで、特定の文字列をエスケープできるのですが、第2引数はタプルで表現しなければならないんですよ。
つまり、第二引数に変数を一つだけ与えたい場合、

(name)




name


ではエラーになってしまいます。
で、正解はこう。

(name,)


タプル恐ろしや。