繁体   English   中英

Python 变量在传递给 if 语句时会丢失值

[英]Python variable loses value when passed to a if statement

我正在尝试检索存储在数据库中的密码哈希。 问题是当查询为空时我如何处理。

在我搜索存在的用户的情况下,第一个 print将打印一些东西,但在 if 语句内的第二个 print中它将输出None

我不明白发生了什么。 在我看来,变量正在失去它的价值

            db_password = c.execute("SELECT hashed FROM contas WHERE username=?", [username])

            print(db_password.fetchone())

            if(db_password.fetchone() != None):
                print(db_password.fetchone())
                hashed, = db_password.fetchone()

                # Verify if passwords match
                if ((bcrypt.checkpw(password.encode('utf8'), hashed) == False)):
                    print("Wrong credentials")

                else:
                    print("User logged in successfully")


            else:
                print(db_password.fetchone())
                print("User doesn't exist")

每次调用db_password.fetchone()时,它都会获取下一行结果。 但是您的查询只返回一行。

if语句中的调用获取该行。 然后print()调用中的调用尝试获取下一行,但没有另一行,所以它打印None 然后变量赋值中的第三个调用尝试获取下一行,但仍然没有另一行,所以你得到一个错误,因为你试图在一个元组赋值中分配None

您应该获取一个变量。 然后你可以测试它并在作业中使用它。

row = db_password.fetchone()
if row:
    print(row)
    hashed = row[0]
    ...
else:
    print("user doesn't exist")

每次调用 fetchone() 都会将光标移动到下一行,如果没有可用的行则返回 None(请参阅此处的文档)。 如果您只想检查一个密码,请将 fetchone 调用的结果存储在一个变量中,并将其用于将来的比较/打印,即

password = db_password.fetchone()
print(password)
if password is not None:
    print(password) # If password is not None, this will print the same thing as the previous print call
    ...
else:
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM