使用 Python 在 SQLite 中进行变量替换
Variable Substitution in SQLite using Python
我想知道如何组合两个 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)
execute()
的第二个参数必须是包含所有SQL参数的序列。
因此您必须使用两个原始列表中的值构建一个列表:
c.execute(query, params + [list[2]])
我想知道如何组合两个 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)
execute()
的第二个参数必须是包含所有SQL参数的序列。
因此您必须使用两个原始列表中的值构建一个列表:
c.execute(query, params + [list[2]])