MySQLのDATETIME型を、SELECT文で取得すると、 pythonのdatetime型で返却される事象があるようです。
私も下記記事のようになりました
Python - PythonでMySQLのTIME型をSELECTする方法|teratail
例コード
import mysql.connector DB_HOST = "192.168.0.XXX" DB_NAME = "your_db_name" DB_USER = "your_db_user" DB_PW = "your_user_pw" conn = mysql.connector.connect(user=DB_USER, password=DB_PW, host=DB_HOST, database=DB_NAME) cur = conn.cursor(dictionary=True) #引数指定すると、辞書型で返してくれる sql = "SELECT ADD_DATE FROM USER;" cur.execute(sql) data = cur.fetchall(); print(data) >>[ { "ADD_DATE": datetime.datetime(2019, 08, 08) } ]
ちなみに、APIを実装するために、Flaskの関数 flask.jsonify()
なんかでJSON変換して送信すると、
文字列がMon Mar 22 05:06:07 GMT 1999
のようになってしまう。
素直にYYYYMMDD hh:mm:ss で表示してほしい・・・
解決方法
MySQLならDATE_FORMAT関数があるので、そちらを使ってフォーマットされた文字列を出力する。
ただしそのままSELECTすると、Pythonで結果をfetchする際に、辞書型のキー名がDATE_FORMAT(****)
になっていまいます。
なので、SQL文を
sql = 'SELECT DATE_FORMAT(ADD_DATE, %s) AS ADD_DATE FROM USER;' cur.execute(sql, ('%Y年%m月%d日 %h時%i分%s秒',))
のようにASを使用してあげるとよいと思います。
ダメな例
なお、Pythonパッケージmysql-connector-python
を使用する場合、
リファレンス通りのSQLを作るとエラーになります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.7 日付および時間関数
NG例
sql = 'SELECT DATE_FORMAT(LAST_UPDATE_DATE,'%Y年%m月%d日 %h時%i分%s秒') FROM USER;"' cur.execute(sql)
恐らくSQL Statementで使用する'%'がエラーで引っかかるのだと思います。
Use mysql DATE_FORMAT in Python - CodeProject
以上