Python 传递给 if 语句时变量丢失值
Python variable loses value when passed to a if statement
我正在尝试检索存储在数据库中的密码散列。问题是当查询为空时我如何处理。
如果我搜索 存在的用户,first print 将打印 something 但在 if 语句内的 second 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")
每次调用 fetchone() 都会将光标移动到下一行,如果没有可用的行,则 return None(请参阅文档 here)。如果您只想检查一个密码,请将 fetchone 调用的结果存储在一个变量中,并将其用于将来 comparisons/printing,即
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:
...
每次调用 db_password.fetchone()
时,它都会获取下一行结果。但是你的查询只有returns一行。
if
语句中的调用获取该行。然后 print()
调用中的调用尝试获取下一行,但没有另一行,因此它打印 None
。然后变量赋值中的第三次调用尝试获取下一行,但仍然没有另一行,所以你会得到一个错误,因为你试图在元组赋值中赋值 None
。
你应该获取一个变量。然后你可以测试它并在作业中使用它。
row = db_password.fetchone()
if row:
print(row)
hashed = row[0]
...
else:
print("user doesn't exist")
我正在尝试检索存储在数据库中的密码散列。问题是当查询为空时我如何处理。
如果我搜索 存在的用户,first print 将打印 something 但在 if 语句内的 second 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")
每次调用 fetchone() 都会将光标移动到下一行,如果没有可用的行,则 return None(请参阅文档 here)。如果您只想检查一个密码,请将 fetchone 调用的结果存储在一个变量中,并将其用于将来 comparisons/printing,即
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:
...
每次调用 db_password.fetchone()
时,它都会获取下一行结果。但是你的查询只有returns一行。
if
语句中的调用获取该行。然后 print()
调用中的调用尝试获取下一行,但没有另一行,因此它打印 None
。然后变量赋值中的第三次调用尝试获取下一行,但仍然没有另一行,所以你会得到一个错误,因为你试图在元组赋值中赋值 None
。
你应该获取一个变量。然后你可以测试它并在作业中使用它。
row = db_password.fetchone()
if row:
print(row)
hashed = row[0]
...
else:
print("user doesn't exist")