SQLite Python和语句不工作

2024-09-24 02:19:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个SQLite数据库中提取一个行列表,这些行位于一周中的某一天和某一天的某个小时。 当我打开sqlite浏览器并键入SQL时:

SELECT * FROM points
WHERE strftime('%H', checkintime) == '12'
  AND strftime('%w', checkintime) == '1'

它起作用了,我收到了我应该接收的所有行。 但是,当我尝试在python中执行此操作时:

^{pr2}$

当时间是12,天是1时,返回的结果为零。 更奇怪的是,当我将execute语句更改为使用硬编码值时,它可以工作。在

我尝试将我的vars类型转换为string和int,但还是不行。:(

有什么建议吗?在


Tags: andfrom数据库列表sqlitesql键入浏览器
3条回答

时间和日期值必须是字符串。另外,我想知道您的“%”是否需要转义(带%%)——有可能在pysqlite中,?占位符被转换成%-样式的占位符,然后您的%H和%w被误解了。下面的方法行吗?在

_points.execute("""SELECT * FROM points WHERE strftime('%%H', checkintime) == ? AND strftime('%%w', checkintime) == ?""", (str(time), str(day)))

如何处理execute调用之外的字符串格式?例如

sql_statement = """SELECT * FROM points WHERE strftime('%s', checkintime) == %s AND strftime('%s', checkintime) == %s""" % ('%H', time, '%w', day)

_points.execute(sql_statement)

这应该避免execute语句无法完成的字符串映射。在

祝你好运!在

我认为您必须将数字参数转换为字符串,否则它们不会像您在sqlite中的语句中那样被引用。变量替换为?不引用数字。在

实际上是在比较字符串,因此必须将参数转换为字符串。在

相关问题 更多 >