2017-01-26 54 views
1

我正在使用Python/Flask並試圖查詢我的數據庫。SQL選擇不工作的地方

conn = sqlite3.connect('./flaskdb.db') 
cur = conn.cursor() 
cur.execute('SELECT email FROM users WHERE email=\'%s\'', "name") 

我有2列,email, password和作爲行/條目之一的值name, password

爲什麼不能正常工作?我得到的錯誤:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 7 supplied. 
+0

請發佈一個完整的示例,以便我們可以看到至少整個導致錯誤的python語句。與往常一樣,[最小化,完整且可驗證的示例](http://stackoverflow.com/help/mcve)使我們更容易爲您提供幫助。 – 2ps

+0

請顯示完整的代碼。通常使用預處理語句,您不必擔心在參數周圍使用單引號,因爲API會爲您處理這些問題。 –

+0

@ 2ps,更新了代碼 – garoo

回答

0

我想你會陷入困境,在這裏使用準備好的語句。試試這個代碼:

conn = sqlite3.connect('./flaskdb.db') 
cur = conn.cursor() 
name = '[email protected]' 
cur.execute('SELECT email FROM users WHERE email=?', (name,)) 

更正包括使用?作爲佔位符代替%s,後者是可能被用於其他數據庫。另外,如果你想綁定一個名爲name的變量,那麼它也不應該引用它。

+0

謝謝!這%s是不允許的,但它期待的表達 – garoo

+0

%s給出了一個類型錯誤 – garoo

+0

對不起,我的意思是語法錯誤和sqlite3.Operationerror – garoo

0

我有一個解決辦法:

cur.execute('SELECT password FROM users WHERE email=(?)', (email,)) 

你需要它作爲一個元組和(?)作爲佔位符。