簡體   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