SQLite Python AND语句不起作用

时间:2011-03-01 08:46:50

标签: python database sqlite execute

我正在尝试从一个SQLite数据库中提取一行,这些行是在一周的某一天和当天的某个小时。 当我打开我的sqlite浏览器并输入SQL时:

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

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

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

如果时间是12而日是1,则返回零结果。 更奇怪的是,当我更改execute语句以使用硬编码值时,它可以正常工作。

我试图将我的变量强制转换为字符串和整数,但它仍然不行。 :(

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

时间和日期值确实需要是字符串。另外,我想知道你的'%'是否需要转义(使用%%) - 在pysqlite内部,?占位符可能转换为%-style占位符,然后你的%H和%w会被误解。以下是否有效?

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

答案 2 :(得分:0)

尝试这样: _points.execute(“”“SELECT * FROM points WHERE strftime('%H',checkintime)==?AND strftime('%w',checkintime)==?”“”(时间,天))

注意%(时间,日期)

我不确定%H和%w,不知道什么是时间和日期格式

答案 3 :(得分:0)

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

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

_points.execute(sql_statement)

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

祝你好运!