如何使用 python 查询 SQlite,然后比较查询结果?

How do I query SQlite using python and then compare the query result?

此代码的目的是验证使用存储在数据库中的密码和用户名输入的密码。 table包含用户名(nick)和密码,密码使用db.crypt加密。

我目前的代码包括:

def check_login(db, username, password):
    """returns True if password matches stored"""
    cursor = db.cursor()
    pass1 = db.crypt(password)
    cursor.execute("SELECT password FROM users WHERE nick=?", (username,))
    passcheck = cursor.fetchone()
    if passcheck == pass1:
        return True
    else:
        return False

但是当 运行 单元测试时,我一直收到断言错误:

   line 29, in test_check_login
        self.assertTrue(users.check_login(self.db, username, password), "Password check failed for username%s" % username)
    AssertionError: False is not true : Password check failed for nick jake

当我使用 print 来显示 passcheck 正在检索的内容时,它会打印正确的加密密码,但在 ('') 标签内(我相信是一个元组)。但是当我打印 cursor.fetchone() 时,它显示 None。我不确定这里出了什么问题,我对发送到函数中的密码进行了加密,以便它可以与存储在数据库中的密码正确匹配。我假设 passcheck 会检索对应于用户 nick 的密码,该密码通过函数传递。

非常感谢任何帮助。

cursor.fetchone()

获取行作为元组:

passcheck == ("hashed password", )

您必须再次比较 passcheck[0] 或解压元组:

passcheck, = cursor.fetchone()

编辑: 让数据库进行比较:

cursor.execute("SELECT * FROM users WHERE username= ? and password= ?",
    (username, pass1))
found = cursor.fetchone()
if found:
    # user exists and password matches
else:
    # user does not exist or password does not match