【发布时间】:2014-01-08 10:19:58
【问题描述】:
我有一个简单的查询,可以将 VARCHAR 列转换为日期时间(我在这里提供的是一个更简化的版本来说明问题)。当直接在 mysql 中执行时,查询会按预期运行:
mysql> SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t;
+----------+
| t |
+----------+
| 13:35:00 |
+----------+
但是,当我在 torndb 中运行完全相同的查询时:
row = conn.get("SELECT STR_TO_DATE('01:35 PM', '%%h:%%i %%p') as t")
print ">>", row.t
我收到以下警告(使用 torndb.Connection 正确构造了 conn):
/Library/Python/2.7/site-packages/torndb.py:226: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
return cursor.execute(query, kwparameters or parameters)
>> None
进一步查看mysqldb,似乎问题与它有关:
conn = db.connect("localhost", 'xxx')
c = conn.cursor()
c.execute("SELECT STR_TO_DATE('01:35 PM', '%%h:%%i %%p') as t")
main:1: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
1L
但是,当我删除双 %% 时,它工作正常:
c.execute("SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t")
1L
c.fetchone()
(datetime.timedelta(0, 48900),)
不知道这里发生了什么......
【问题讨论】:
-
显然,问题在于 torndb 传递给初始化 mysqldb 的参数 - sql_mode="TRADITIONAL"。删除它可以解决问题,但我不确定为什么会导致问题。
标签: python mysql datetime tornado mysql-python