DISTRICT 37

なにか

mysqlclientでCRUDする

というよりmysql-connector-pythonがインストールできなかった。

dragstar.hatenablog.com

mysql-connector-pythonをpipからインストールしようとしたら下記のエラーが出た

Could not find a version that satisfies requirement mysql-connector-python(from versions: )
No matching distribution found for mysql-connector-python

残念だが君はバージョンを満たしてないようだね。というご宣託。

MySQL :: MySQL Connector/Python Developer Guide :: 3 Connector/Python Versions

公式リンクによるとpython3.3と書いてあるのでPython3.5の僕はアウトらしい。ということでmysqlclientをしばらく相棒にしようかと思う。インストールはpipで。

pip install mysqlclient

エラーがでるようならaptでライブラリを入れておく

sudo apt insatall libmysqlclient-dev

接続と終了

import MySQLdb

con = MySQLdb.connect(
        user = "user",
        passwd = "pass",
        host = "yourhost",
        db = "yourdb")
cur = con.cursor()
cur.close
con.close

以降はこの接続と変数を使うという前提です

Read(SELECT)

CRUDといいながらまずはセレクト

cur.execute("select * from tbl")
for row in cur.fetchall():
    print(str(row[0]))

cur.close

Create(INSERT)

続いてINSERT

cur.execute("INSET INTO tbl(id, value) VALUES (1, 100)")
con.commit
cur.close
con.close

一括INSERTはこんな感じ。

cur.executemany("INSET INTO tbl(id, value) VALUES (%s, %s)", [(1, 100), (2, 200), (3, 300)])
con.rollback
cur.close
con.close

Update

なんかSQLさえ流せればという感じがしてきた。

cur.execute("UPDATE tbl SET value=400 WHERE id = 2")
con.commit
cur.close
con.close

Delete

結局これも。

cur.execute("DELETE FROM tbl WHERE id = 3")
con.rollback
cur.close
con.close

まとめ

途中でも書いたけど、SQLさえかければという感じがする。というよりRDBのドライバに求められているのって結局それなんでしょうね。あとはJavaでいうところのPreparedStatement#addBatch()みたいなやつが欲しいんだけどなぁ。どうだろ?Documentを探せばあるかな。

Welcome to MySQLdb’s documentation! — MySQLdb 1.2.4b4 documentation