如何将数据库中的值与 python 输入进行比较

How can I compare a value from database to python input

所以我正在尝试创建一个登录系统,有点正常 python 终端。我做了一个注册功能,但我正在努力使用登录功能。我正在尝试将我的输入与用户名和密码进行比较,完成后我将添加 ID。但是我怎么能那样呢,我什么都试过了。

当我 运行 代码并输入正确的详细信息时,它告诉我“登录失败,用户名或密码错误”,这意味着我的 if 语句有问题。

    import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password=""
)
mycursor = mydb.cursor(buffered=True)

def login():
    mycursor.execute("USE logintest")
    login_username = input("Please enter your username or email: ")
    login_password = input("Please enter your password: ")
    
    check_login = f"SELECT username FROM users WHERE username = '{login_username}'"
    check_password = f"SELECT password FROM users WHERE password = '{login_password}'"

    mycursor.execute(check_login)
    username_result = mycursor.fetchall()

    mycursor.execute(check_password)
    password_result = mycursor.fetchall()

    passwordr = password_result
    usernamer = username_result

    print(usernamer)
    print(passwordr)

    if login_password == passwordr and login_username == usernamer:
        print("Logged in successfully")
    else: 
        print("Login failed, wrong username or password")
        
        
    
def register():
    mycursor.execute("USE logintest")
    new_username = input("please pick a username: ")
    new_email = input("please enter your email: ")
    new_password = input("please pick a password: ")
    insert_new_user = "INSERT INTO users (username, email, password) VALUES (%s, %s, %s)"
    new_user = (new_username, new_email, new_password)
    mycursor.execute(insert_new_user, new_user)
    mydb.commit()
    print("User successfully created! insert id:", mycursor.lastrowid)
    

def options():
    print("1. login")
    print("2. register")
    options = input("please pick 1 or 2: ")
    if "1" in options:
        login()
    elif "2" in options:
        register()
    else: 
        print("please only select 1 or 2")
        options()

options()

通常在python中从数据库中取数据时,returns是数据的列表,而在python中输入的是一个字符串,所以换句话说,你正在将字符串与始终为假的列表进行比较。

您应该创建一个函数来验证登录详细信息。这是验证登录详细信息的方法,它应该在函数内部:

         try:
        username = input("your username")
        password = input("your password")

        conn = (your connection code);
        result = conn.execute("SELECT * FROM yourTable WHERE usernameColumnOfYourTable = ? AND passwordColumnOFyourTable = ?", (username, password))
        print("connected to database")
        if (len(result.fetchall()) > 0):
            print("user found")

        else:
            print("user not found")

    except Exception as err:
        print("couldn't connect")
        print("General error :: ", err)

注:?是 pyodbc 模块的参数标记,如果您使用的是 mysql 连接器,请替换 ?与 %s

签约

但是如果您使用的是散列(加盐)密码,格式会有点不同。

将此逻辑应用于您的代码:

 def login():
connection = (establish your database connection here)
login_username = input("Please enter your username or email: ")
login_password = input("Please enter your password: ")

result = connection.execute("SELECT username FROM users WHERE username = ? AND password = ?",(login_username, login_password) )"

if (len(result.fetchall()) > 0):

    print("Logged in successfully")
else: 
    print("Login failed, wrong username or password")