2017-10-08 78 views
0

我使用SQLite3在Python中創建登錄系統。我的代碼將按照以下方式選擇所有存儲在數據庫中的用戶名和密碼的記錄。SQLite3記錄操作

c.execute('SELECT * from foo WHERE username="%s" AND password="%s"' (username, password). 
if c.fetchone is not None: 
    do stuff 

我不知道那麼如何從記錄中的數據分配到一個函數中的局部變量,這樣我就可以檢查它的價值。在這種情況下,我想從剛剛搜索的記錄中檢索usergroup值,然後檢查它是1還是2,以確定下一個要調用的函數。

+0

'fetchone'是一種方法;你調用它,並返回數據。 –

+0

那我該如何使用'fetchone'? –

+0

就像其他方法一樣。 'data = c.fetchone()'。 –

回答

0

要調用fetchone方法,必須使用括號:

if c.fetchone() is not None: 

如果你不fetchone()的返回值賦值給一個變量,它會丟失。

這將是一個更好的主意,直接在光標迭代:

for row in c: 
    print('value in first column: ', row[0]) 
    break 
else: 
    print('not found') 

你應該只選擇一列,這使得訪問其價值更容易:

c.execute('SELECT usergroup FROM ...') 
for (usergroup,) in c: 
    print('group: ', usergroup) 

如果有人輸入密碼" OR "1"="1,然後他進入。爲了防止這樣的SQL injections,總是使用參數:

c.execute('SELECT usergroup FROM foo WHERE username=? AND password=?', 
      (username, password)) 
for (usergroup,) in c: 
    print('group: ', usergroup) 
    break 
else: 
    print('not found')