2016-09-27 38 views
-2

我有一個方法,我檢查用戶是否存在於數據庫中,我想將該方法結果傳遞給另一個方法,但無法這樣做,錯誤我看到的是「類型錯誤:‘布爾’對象不是可調用的」不能從一種方法返回布爾值

這裏是我的代碼:

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    if data is None: 
     return False 
    else: 
     True 

而這正是我試圖調用aboves方法結果

@app.route('/showSignIn', methods=["POST"]) 
def showSignInPost(): 
    username = request.form['inputUserName'] # values received from the UI input by users 
    email = request.form['inputEmail'] 
    password = request.form['inputPassword'] 

    inDB == userInDb(username, email, password) 

    if inDB is True: 
     return render_template('signin.html', signInHeader = "User doesn't exist, please try again") 
    else: 
     return render_template('signin.html', signInHeader = "Welcome " + username) 

非常感謝即

+0

您在那個'else'分支中缺少一個'return',但那不會引起您當前擁有的錯誤。我期望'inDB'有一個'NameError'。你可以顯示你的完整回溯 –

+1

你也應該在'inDB == userInDb(username,email,password)'行中使用單個'='而不是雙倍 – valignatev

+0

@valentjedi是的,我注意到只有在複製代碼後才發現錯誤。謝謝! – limeThyme

回答

0

你忘記返回True

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    if data is None: 
     return False 
    else: 
     return True #you forgot return 

你正在測試inDB == userInDb(...)而不是分配inDB = userInDb(...)

你也可以做if inDB:代替if inDB is True:

如果你這樣做

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    return bool(data) # just return bool of data 

將會更清潔

+1

他們還測試'inDB == userInDb(...)'而不是分配,並測試'如果inDB是True:'而不是'如果inDB:'(後者沒有錯,只是皺起眉頭)。 – ShadowRanger

+0

謝謝,現在它工作。我調整了另一種方法返回布爾(數據) - 不知道這個技巧。非常感激。 – limeThyme

+0

@limeThyme不客氣。如果此問題解決了您的問題,請將此帖標記爲答案,以便用戶看到此問題不再需要他們的幫助。 –