Python で日本語を含む MySQL の select 結果を json で出力

Python で日本語を含む MySQL の select 結果を json で出力する最小限のコードをメモ

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系
#!~\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()


コメント