python - 如何将我表上的 fetchall() 的输出限制为仅值?

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

我该怎么做?

谢谢

最佳答案

如果您只需要一个值,可以使用 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',) 

您还可以使用 LIMIT如果您想使用 fetchall() 限制返回值的数量。

更重要的是,不要这样格式化您的查询。习惯使用 ? 占位符,这样您就不会受到 SQL 注入(inject)攻击。

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

关于python - 如何将我表上的 fetchall() 的输出限制为仅值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224455/

相关文章:

python - 通过从固定的常量日期时间偏移以秒为单位的间隔来获取新的日期时间

php - 使用 PHP 锁定 SQL Server 数据库

sqlite - 如何可靠地序列化数据

java - 单击 ListView 中的项目时,Android 应用程序崩溃

javascript - 为 Javascript 预加载的本地数据库后端(可能吗?)

python - 如何通过带有请求的多部分 POST 来发布 Image 对象?

使用 win32com 的 Python 不会使用所需的加载项更新 Excel 工作表

database - 在 DbNavigator Delphi 上按下刷新后的错误结果

php - 在 MVC 中建模数据库实体——如何创建它们?

python - 我的 Python 中的二分搜索功能不起作用