在python中选择日期时间mysql查询

wj8zmpe1  于 2022-10-31  发布在  Mysql
关注(0)|答案(5)|浏览(189)

我的MySQL数据库中有以下表:
| 标识符|特普洛塔|创建时间|
| - -|- -|- -|
| 一个|十二点五二一分|2017年2月1日17:49:53|
| 一个|十二点八五二分|2017年2月2日17:50:53|
| 一个|十二点八五二分|2017年2月3日17:50:53|
| 一个人。|一个人。|一个人。|
created_at具有类型timestamp,下面是我的CREATE TABLE语句中的列定义:

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

当我在DB中使用这个select命令时,它正常工作,并且我得到了正确的输出

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 and created_at〈2017-01-31 00:00:00”附近使用的正确语法
你知道我做错了什么吗?谢谢

3zwtqj6y

3zwtqj6y1#

我遇到了同样的问题,并使用“around %s”解决了该问题:

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

jv4diomz2#

尝试使用“BETWEEN”比较器,如下所示:

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

它是为这种类型的查询而创建的。
否则,我不知道为什么MySQL引擎会通过这个错误。也许尝试添加单引号周围的日期占位符?

xvw2m8pv

xvw2m8pv3#

您错过了%s上的“”
应该是
c.execute("select * from ts2 where created_at >= '%s' and created_at < '%s';" % (t1, t2))

qxsslcnc

qxsslcnc4#

尝试转换为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
xkftehaa

xkftehaa5#

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))

相关问题