2017-02-28 110 views
0

我想檢查值行中對某些列出一個表,並獲得相匹配的行數,但要得到,我只是似乎無法讓過去一個語法錯誤:Sqlite3 - SELECT語法錯誤?

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在使用WHERE時使用與INSERT不同的語法嗎?另外

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

,你可以使用行值,但你的Python可能是:非常感謝

回答

0

多重比較必須與邏輯運算等進行分離AND或OR(又該逗號意味着什麼呢?)不夠新,無法支持它:

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] 
+0

對於我得到的第一個例子:'ValueError:參數是不受支持的類型' - X,Y,Z是'TEXT'類型,列表包含文本字符串,但是 - 我在想也許有事要做將壓縮列表作爲值?第二次嘗試返回'sqlite3.OperationalError:near「,」:語法錯誤「 – Mark33

相關問題