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

Reading MySQL via Python sometimes causes warning 1292, seemingly interpreting seconds as greater than 60.

这是一个奇怪的帖子,虽然我找到了几个处理 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  .......

备注:

问题:(显然)我该如何纠正这个警告?

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

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

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

时,您将收到错误消息