我正在尝试根据某些列表检查表中行中的值并获取匹配行的数量,但是仍然会遇到语法错误,我似乎无法通过:
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
不同吗?非常感谢
答案 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]