SQL列表中的两个值之一

时间:2014-06-20 22:39:11

标签: python sql sqlite

所以我有一个值列表,我希望在某个日期之后检索所有条目,只要在值列表中找到两个项目中的任何一个 -

我试过这样的事情:

"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,然后是否其中一个是在列表中。我也尝试了许多其他明显的变化,但似乎都没有得到理想的结果。

1 个答案:

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