代码之家  ›  专栏  ›  技术社区  ›  SteveJ

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

  •  0
  • SteveJ  · 技术社区  · 7 年前

    这是一个奇怪的例子,虽然我发现有几篇帖子都在处理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 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    使用适当的 INTERVAL 表达式而不是 10

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

    您的代码正在转换 NOW() 到整数,如 20171107190408 然后减去 从那以后。当当前时间的秒数小于 10 .