繁体   English   中英

使用TornDB Python进行日期时间格式化

[英]Datetime formatting with torndb python

我有一个简单的查询,它将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打开SQL模式“ TRADITIONAL”,该模式在mysql服务器上启用了许多选项。 其中有NO_ZERO_DATE和NO_ZERO_IN_DATE,这使服务器对无效的DATE和DATETIME更加严格。 在这种情况下,STR_TO_DATE应该返回一个TIME,而不是DATETIME,因此它不应该受到影响,但看起来像是在内部触发了时间戳的缺少日期部分的某种检查。 这看起来像mysql中的错误。 最简单的解决方法是不使用TRADITIONAL模式(或至少取消设置NO_ZERO_IN_DATE标志)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM