使用Python

时间:2017-11-04 22:14:35

标签: python python-3.x sqlite substitution

我试图弄清楚如何组合两个SQLite查询。它们都可以独立工作,但是当我将它们与AND放在一起时它们不起作用。我认为问题是我不知道如何正确传递变量。 第一个有效的查询:

var1 = 10
mylist = ['A', 'B', 'C', 'AB', 'AC']
c.execute("SELECT * FROM my_table WHERE column1=(?) ORDER BY RANDOM() LIMIT 1", (mylist[2],))

这条线也有效:

params = [5,0,1]
query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s)" % ','.join('?' * len(params)))
c.execute(query, params)

我一直试图将这两个陈述合并而不成功:

query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s) AND column1=(?)" % ','.join('?' * len(params)))
c.execute(query, params, mylist[2])

如果有人发现这有用,我的最终解决方案如下:

query = ("SELECT * FROM my_table WHERE column1 = (?) AND column2 NOT IN (%s) ORDER BY RANDOM() LIMIT 1" % ','.join('?' * len(params)))
    c.execute(query, [mylist[2]] + params)

1 个答案:

答案 0 :(得分:2)

execute()的第二个参数必须是包含所有SQL参数的序列。

因此,您必须使用原始列表中的值构建单个列表:

c.execute(query, params + [list[2]])