【问题标题】:Select DateTime mysql query in python在python中选择DateTime mysql查询
【发布时间】:2017-02-04 21:09:58
【问题描述】:

我的 MySQL 数据库中有下表:

id teplota created_at
1 12.521 2017-02-01 17:49:53
1 12.852 2017-02-02 17:50:53
1 12.852 2017-02-03 17:50:53
... ... ...

created_at 列的类型为时间戳,这是我的CREATE TABLE 语句中的列定义:

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

当我在 DB 中使用此选择命令时,它通常可以工作并且我得到正确的输出

select * from ts2 where created_at >= "2017-02-01" and created_at < "2017-02-02"

但如果我想在我的 python 代码中使用它,我有一个问题:

import datetime

t1 = datetime.datetime(2017, 2, 1)
t2 = datetime.datetime(2017, 2, 2)
t1 = str(t1)
t2 = str(t2)
c.execute("select * from ts2 where created_at >= %s and created_at < %s;" % (t1, t2)) 

我收到以下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '00:00:00 和 created_at

知道我可能做错了什么吗? 谢谢

【问题讨论】:

  • 在执行和发布前打印查询

标签: python mysql sql datetime


【解决方案1】:

尝试像这样使用“BETWEEN”比较器:

c.execute("SELECT * FROM ts2 WHERE created_at BETWEEN %s and %s" % (t1, t2))

它是为这种类型的查询创建的。

否则我不确定 MySQL 引擎为什么会通过该错误。也许尝试在日期占位符周围添加单引号?

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,用 ' around %s 来解决它:

    sql_query = "select * from ts2 where created_at >= '%s' and created_at < '%s';" % (t1, t2)
    c.execute(sql_query)
    

    【讨论】:

      【解决方案3】:

      尝试转成iso格式:

      t1 = datetime.datetime(2017, 2, 1)
      t2 = datetime.datetime(2017, 2, 2)
      t1 = str(t1.isoformat())
      t2 = str(t2.isoformat())
      c.execute("select * from ts2 where created_at >= %s and created_at < %s;" % (t1, t2)) 
      isoformat
      

      【讨论】:

        【解决方案4】:
        t1 = datetime.datetime(2017, 2, 1)
        t2 = datetime.datetime(2017, 2, 2)
        t1 = repr(str(t1))
        t2 = repr(str(t2))
        c.execute("select * from ts2 where created_at >= %s and created_at < %s;" % (t1, t2)) 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-19
          • 2011-09-18
          • 1970-01-01
          • 2016-01-16
          • 2018-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多