小编典典

使用WHERE ___ IN ___语句

python

我试图弄清楚如何正确使用WHERE IN 语句

定义:

c.execute('''CREATE TABLE IF NOT EXISTS tab (
    _id integer PRIMARY KEY AUTOINCREMENT,
    obj text NOT NULL
    ) ;''')

我正在尝试做这样的事情:

list_of_vars=['foo','bar']
statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'"+"','".join(list_of_vars)+"'")

另外,我也尝试过这样做,它可以直接评估以上内容

statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'foo','bar'")

我得到的错误是:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 9 supplied

这给我一个错误。当我这样做时,它可以工作,但是不建议这样做,因为它容易受到SQL注入攻击。

statement="SELECT * FROM tab WHERE obj IN ("+"'"+"','".join(statement)+"'"+")

阅读 225

收藏
2021-01-20

共1个答案

小编典典

您需要创建足够的参数以匹配您的vars列表:

statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars)))
c.execute(statement, list_of_vars)

请注意,您将传入list_of_vars作为参数值列表。使用,', '.join()我们生成?由逗号分隔的字符串,然后用于.format()将其插入语句中。

对于一长串变量,使用临时表保存这些值,然后JOIN对临时表使用a而不是IN具有绑定参数的子句,可能会更有效。

2021-01-20