如何将数据库中的值与 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")
所以我正在尝试创建一个登录系统,有点正常 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")