2017-02-14 4 views
1

I以下の機能を有する:テーブルの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) 

Iが行の変数idvalueに自分userdetailsテーブルのIDの値を割り当てる場合、入力されたユーザ名= 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()

関連する問題