素の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()