2017-02-14 36 views
1

我有以下功能:如何限制一個使用fetchall()在我的表中的輸出只值?

def credential_check(username, password): 
      conn = sqlite3.connect('pythontkinter.db') 
      c = conn.cursor() 
      idvalue = c.execute('''SELECT ID FROM userdetails WHERE username = "{0}"'''.format(username)).fetchall() 
      print(idvalue) 

我想在我的UserDetails表的行中的分配ID的值給變量idvalue其中輸入用戶名=的UserDetails用戶名,但是當我使用此使用fetchall()我得到[('0',)]打印出來,而不是僅僅0

我該如何去做這件事?

感謝

回答

1

您可以使用fetchone(),如果你只想要一個值。然而,結果仍然會返回一個元組,只是沒有列表。

import sqlite3 

conn = sqlite3.connect('test.db') 
c = conn.cursor() 

c.execute('''CREATE TABLE IF NOT EXISTS testing(id TEXT)''') 
conn.commit() 

c.execute("""INSERT INTO testing (id) VALUES ('0')""") 
conn.commit() 

c.execute("""SELECT id FROM testing""") 
data = c.fetchone() 
print data 
# --> (u'0',) 

您還可以,如果你想限制與fetchall()返回值的個數使用LIMIT

更重要的是,不要格式化你的查詢這樣的。習慣了這樣,你是不是容易受到SQL注入使用?佔位符當成了習慣。

idvalue = c.execute("""SELECT ID FROM userdetails WHERE username = ?""", (username,)).fetchone()

相關問題