素のAnacondaからMySQLにアクセスする方法。Pythonは思いのほか、MySQLにアクセスするのに手間がかかる。
環境
- anaconda3-2.4.0(Python3.5.1)
2.7.xでも、print()の()を取れば動きます。その程度の違いです。
ドライバのインストール
ドライバは、
- mysql-connector-python
- PyMySQL
の2つを試してみます。
mysql-connector-python編
とりあえず、これを使う。
conda install -c https://conda.anaconda.org/anaconda mysql-connector-python
利用(読取り)
訳あって、少しPHP風に書いてます。
DBのスキーマ等は省略。
# coding:utf-8
import mysql.connector
# 接続情報
dbh = mysql.connector.connect(
host='localhost',
port='3306',
db='testdb',
user='dbuser',
password='password',
charset='utf8'
)
# カーソル取得
stmt = dbh.cursor(buffered=True)
# SQL
sql = "select * from members"
# 実行
stmt.execute(sql)
# 取得
rows = stmt.fetchall()
# ループ
for row in rows:
print(row[1])
# 掃除
stmt.close()
dbh.close()
利用(書込)
追記:読取りのSQL変えるだけと思っていましたが、ちょっと違うのですね。commit()する必要があるようです。
# coding:utf-8
import mysql.connector
# 接続情報
dbh = mysql.connector.connect(
host='localhost',
db='testdb',
user='dbuser',
password='password'
)
# カーソル取得
stmt = dbh.cursor(buffered=True)
# SQL
sql = "insert into members(name) values('foo');"
# 実行
stmt.execute(sql)
# コミット
dbh.commit()
# 掃除
stmt.close()
dbh.close()
参考
ここに良い記事がありました。
PyMySQL編
私の環境では、Djangoの時は、PyMySQLしか動きませんでした。。
インストール
pip install PyMySQL
利用(読取り)
コードはこんな感じ。微妙に違う。
# coding:utf-8
import pymysql
# 接続情報
dbh = pymysql.connect(
host='localhost',
user='dbuser',
password='password',
db='testdb',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
# カーソル
stmt = dbh.cursor()
# SQL
sql = "select * from auth_user"
# 実行
stmt.execute(sql)
# 取得
rows = stmt.fetchall()
# ループ
for row in rows:
print(row)
# 掃除
stmt.close();
dbh.close();
利用(書込)
やはりcommit()が必要。
# coding:utf-8
import pymysql
# 接続情報
dbh = pymysql.connect(
host='localhost',
user='dbuser',
password='password',
db='testdb',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
# カーソル
stmt = dbh.cursor()
# SQL
sql = "insert into members(name) value('pymysql1')"
# 実行
stmt.execute(sql)
# コミット
dbh.commit()
# 掃除
stmt.close()
dbh.close()