如何将fetchall()的输出限制在我的表上只是值?

时间:2017-02-14 11:01:47

标签: python database sqlite python-3.6

我有以下功能:

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值分配给输入的username = userdetails username的行中的变量idvalue,但是当我使用此fetchall()时,我会打印[('0',)]而不仅仅是0

我该怎么做?

由于

1 个答案:

答案 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注入的攻击。<​​/ p>

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