所以我有一个值列表,我希望在某个日期之后检索所有条目,只要在值列表中找到两个项目中的任何一个 -
我试过这样的事情:
"SELECT * FROM table WHERE (date > ?) AND (item1 OR item2 IN (%s))"
%(date, qForEach(len(my_list)))
def qForEach(list_length):
s = "?"
for i in range((list_length - 1)):
s += ",?"
return s
cursor.execute(statement, bindings)
但显然SQL认为我问的是item1 OR item2,然后是否其中一个是在列表中。我也尝试了许多其他明显的变化,但似乎都没有得到理想的结果。
答案 0 :(得分:0)
您必须单独检查这两个项目。
您必须确保将所有参数(?
)传递给execute
的第二个参数:
params = ",".join(["?" for i in range(len(my_list))])
statement = """SELECT * FROM MyTable
WHERE date > ?
AND (item1 IN (%s) OR item2 IN (%s))""" % (params, params)
bindings = [my_date] + my_list + my_list
cursor.execute(statement, bindings)
您可以使用numbered parameters:
避免重复绑定值params = ",".join(["?"+str(i+2) for i in range(len(my_list))])
statement = """SELECT * FROM MyTable
WHERE date > ?
AND (item1 IN (%s) OR item2 IN (%s))""" % (params, params)
bindings = [my_date] + my_list
cursor.execute(statement, bindings)