mysql-connector-pythonを導入する
環境
- macOS 10.13.6
- Python 3.7.1
- conda 4.5.12
- mysql-connector-python
- mysql-connector-python-rf
- mysqlclient
パッケージのインストール
$ pip install mysql-connector-python
接続
import mysql.connector
# 接続
config = {
'user': 'sample_user',
'password': 'password',
'host': 'localhost',
'database': 'sample_db'
}
cnx = mysql.connector.connect(**config)
cur = cnx.cursor()
CREATE TABLE
# テーブル作成
def create_table():
query = """CREATE TABLE IF NOT EXISTS sample_table (
id int NOT NULL,
name VARCHAR(20) NOT NULL
)"""
cur.execute(query)
- ダブルクオテーション(
"
)を3つ続けて書くことで改行を含む文字列を代入できる。
INSERT
# データ挿入
def insert():
try:
query = "INSERT INTO sample_table (id, name) VALUES (%s, %s)"
# 単一行挿入
cur.execute(query, (1, "hoge"))
# タプルで複数行挿入
dataset_tpl = [
(2, "fuga"),
(3, "piyo"),
(4, "hogefuga"),
(5, "fugafuga")
]
# リストでもいける
dataset_list = [
[2, "fuga"],
[3, "piyo"],
[4, "hogefuga"],
[5, "fugafuga"]
]
cur.executemany(query, dataset_list)
# データのコミット
cnx.commit()
except Exception as e:
# エラー時にロールバック
cnx.rollback()
raise e
- executeの第二引数にはタプルもリストも使える
- commit()をしないと変更内容が確定されないので注意
SELECT
# データ取得
def select():
# 全件取得
query = "SELECT * FROM sample_table"
cur.execute(query)
print("all:")
rows = cur.fetchall()
for row in rows:
print(row)
# テーブル名を変数で入れる場合は文字列でつなぐ
table_name = "sample_table"
# プリペアードステートメントで絞り込み
query = "SELECT * FROM " + table_name + " WHERE name = %s"
cur.execute(query, ["hoge"])
print("hoge:")
rows = cur.fetchall()
for row in rows:
print(row)
- テーブル名にはプリペアードステートメントを使用できないので、文字列でつなぐ。エスケープした方が安全なので、このページを見て試そうとしたが、
AttributeError: 'CMySQLConnection' object has no attribute 'escape_string'
と出てしまい謎なので後々…
ディスカッション
コメント一覧
まだ、コメントがありません