現在開発しているものはScalaで前処理を行っているので,本番の処理も本当は全部Scalaで書ければよかったのだけれども,そうは問屋が卸さず,種々の原因によりPythonが必要になってしまった. これなら最初から全部Pythonでよかったのでは,とも思うけれど,PythonはJupyterで小さなものを色々弄るのには使うものの,大きいものをPythonで書いた経験が無いので心配.型が違う,という注意が沢山出そうだ.
ともかく,そのためにPythonからMySQLを扱う必要が出てきた.Pythonists3は新しいもの好きなのか,いまやNoSQLを使うのがトレンドなのか,MySQL周りの情報が少ないのだが,pymysql
を使うことに落ち着いた.
connection = pymysql.connect(host="HOSTNAME",
user="USERNAME",
password="PASSWORD",
db="DB_NAME",
charset='utf8',
cursorclass=pymysql.cursors.DictCursor) #1
with connection.cursor() as cursor:
sql = "SELECT name FROM table WHERE id=%s"
cursor.execute(sql, (900))
results = cursor.fetchall()
for r in results:
b = r['name']
print(bytes.decode(b)) #2
#1を指定することで,返ってくる結果がdict形式になって分かりやすい.
最後,#2でname
に相当する列がvarbinary
であったので,文字列に変換するのにbytes.decode()
が必要だった.とりあえずこれで一件落着.