通过Python读取MySQL有时会导致警告1292,似乎将秒数解释为大于60。

时间:2017-11-07 19:21:45

标签: python mysql python-3.5 pymysql

这是一个奇怪的,虽然我找到了几个关于1292警告的帖子,但似乎没有什么比我的情况更合适。

设置: Python 3.5 PyMySQL == 0.7.11 MySql 5.5.53

查询:

Executing sql: SELECT PacketID, `Type`, `Length`, Raw_Data
                    FROM extra_packets 
                    WHERE `Time` > NOW() - 10  AND PacketId > '18345' ORDER BY `Time` DESC;

结果:

python3.5/site-packages/pymysql/cursors.py:323: Warning: (1292, "Incorrect datetime value: '20171107190398' for column 'Time' at row 1")

示例数据:

PacketID    Time                Type    Length  Raw_Data

18,346      2017-11-07 19:04:06 76  22  .......
18,345      2017-11-07 19:04:01 76  22  .......
18,344      2017-11-07 19:03:57 76  22  .......

备注:

  • 在警告消息中,秒值大于60 - 我认为这是问题吗?
  • 这并不总是发生,大概是时间特定的
  • 我实际上并没有在响应中使用Time - 仅用于过滤器。

问题:(显然)如何更正此警告?

1 个答案:

答案 0 :(得分:1)

使用正确的INTERVAL表达式代替10

WHERE Time > DATE_SUB(NOW(), INTERVAL 10 SECOND)

您的代码正在将NOW()转换为20171107190408之类的整数,然后从中减去10。当当前时间的秒数小于10时,您将收到错误。