Python で日本語を含む MySQL の select 結果を json で出力
Python で日本語を含む MySQL の select 結果を json で出力する最小限のコードをメモ
Python2.7系
Python2.7系
#!~\python2.7
# -*- coding: utf-8 -*-
# utf8 output
import sys
import codecs
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
# header
print("Content-type: text/plain; charset=utf-8")
print("")
# mysql
import mysql.connector
import json
conn = mysql.connector.connect(user='root', password='passwd', host='localhost', database='myDB')
cur = conn.cursor(dictionary=True)
try:
cur.execute("select * from myTable;")
rows = cur.fetchall()
print(json.dumps(rows, ensure_ascii=False))
finally:
cur.close()
conn.close()
- sys.stdout = codecs.getwriter('utf_8')(sys.stdout) で出力を UTF8に
- cursor で dictionary=True を指定することで、fetch内容に列名が入ってくるので jsonで利用しやすくなります
MySQLdb を利用している場合は、cursor(MySQLdb.cursors.DictCursor) - json.dumps で ensure_ascii=False を入れないと、"\u4e0d\u660e" みたいに ASCII以外を Unicodeエスケープされてしまいます
#!~\python3
# -*- coding: utf-8 -*-
# utf8 output
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
# header
print("Content-type: text/plain; charset=utf-8")
print("")
# mysql
import mysql.connector
import json
conn = mysql.connector.connect(user='root', password='passwd', host='localhost', database='myDB')
cur = conn.cursor(dictionary=True)
try:
cur.execute("select * from myTable;")
rows = cur.fetchall()
print(json.dumps(rows, ensure_ascii=False))
finally:
cur.close()
conn.close()
コメント