Sqlite3 - SELECT语法错误?

时间:2017-02-28 15:55:36

标签: python list sqlite zip

我正在尝试根据某些列表检查表中行中的值并获取匹配行的数量,但是仍然会遇到语法错误,我似乎无法通过:

c.execute("SELECT count(*) FROM myTable WHERE Column1 > Column2 AND 
(X = ?, Y = ?, Z = ?)", zip(listX, listY, listZ))
number = c.fetchall()
print(number)

X,Y和Z是列名。我明白了:

sqlite3.OperationalError: near ",": syntax error

我有类似的东西,但使用INSERT代替SELECT并且工作正常。我是sqlite3的新手;使用SELECT时,INSERT使用的语法与WHERE不同吗?非常感谢

1 个答案:

答案 0 :(得分:0)

必须使用AND或OR等逻辑运算符分隔多个比较(逗号应该是什么意思?):

SELECT count(*)
FROM myTable
WHERE Column1 > Column2
  AND X = ?
  AND Y = ?
  AND Z = ?;

或者,您可以使用行值,但您的Python可能不够支持它:

SELECT count(*)
FROM myTable
WHERE Column1 > Column2
  AND (X, Y, Z) = (?, ?, ?);

如果要检查多组值,则必须在SQL查询中添加适当数量的检查,或者只执行多次:

number = 0
for xyz in zip(listX, listY, listZ):
    c.execute('''SELECT count(*) FROM myTable
                 WHERE Column1 > Column2
                   AND X = ?
                   AND Y = ?
                   AND Z = ?''', xyz)
    number += c.fetchone()[0]