使用数据库使用python登录
我试图让用户登录,而如果他们键入正确的用户名和密码,他们将能够这样做,但我不断得到一个错误,当我输入登录详细信息使用数据库使用python登录,python,mysql,database,tkinter,Python,Mysql,Database,Tkinter,我试图让用户登录,而如果他们键入正确的用户名和密码,他们将能够这样做,但我不断得到一个错误,当我输入登录详细信息 def login(self): global con if self.txt_user.get() == "" or self.txt_pass.get() == "": messagebox.showerror("Error", "Please fill up all field
def login(self):
global con
if self.txt_user.get() == "" or self.txt_pass.get() == "":
messagebox.showerror("Error", "Please fill up all fields!")
else:
try :
con=pymysql.connect(host="localhost",user="root",password="",database="employee")
cur=con.cursor()
cur.execute("select * from employeelist where username=%s",self.txt_user.get())
row=cur.rowcount
print(row)
if row != None :
cur.execute("select password from employeelist where username=%s", self.txt_pass.get())
row1 = cur.rowcount
print(row1)
if(row1 != None):
messagebox.showinfo("Success", "Login Successful", parent=self.root)
m = menu
m.Menu(root)
else:
messagebox.showerror("Error", "Wrong Password. Please try again!")
else:
messagebox.showerror("Error, Wrong Username or Password. Please try again!")
except Exception as ex:
con.close()
messagebox.showerror("Error",f"Error due to: {str(ex)}",parent=self.root)
您正在使用密码(即
self.txt\u pass.get()
)查找用户名,因此它找不到任何记录,因此您一直都会遇到错误。ez fix存在以下问题:
将是一个数字,永远不会是rowcount
,因此None
将始终为如果是row!=无
真
- 在
选择中使用了
不正确,则应改用self.txt\u pass.get()。。。如果用户名=%s
self.txt\u user.get()
def login(self):
user = self.txt_user.get().strip()
passwd = self.txt_pass.get().strip()
if user == "" or passwd == "":
messagebox.showerror("Error", "Please fill up all fields!")
else:
try :
con = pymysql.connect(host="localhost", user="root", password="", database="employee")
cur = con.cursor()
cur.execute("SELECT 1 from employeelist WHERE username = %s and password = %s", (user, passwd))
if cur.rowcount == 1:
messagebox.showinfo("Success", "Login Successful", parent=self.root)
else:
messagebox.showerror("Error", "Invalid credentials. Please try again!")
except Exception as ex:
messagebox.showerror("Error", f"Error due to: {str(ex)}", parent=self.root)
finally:
con.close()
您还可以使用callproc选项。 导入pymysql
try:
conn = pymysql.Connect(
host='localhost',
user='root',
passwd = '',
db='testing'
#,autocommit=True
)
#pymysql.cursors.DictCursor
cur = conn.cursor()
params = ('official',1)
cur.callproc('getlogindetails',args=params)
# cur.execute("call getlogindetails(?,?)", params)
ls = list(cur.fetchall())
#your logic here based on the list value
finally:
conn.close()
程序:
分隔符$$
DROP PROCEDURE IF EXISTS `testing`.`getlogindetails` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getlogindetails`(in inusername
varchar(100),in inloginid integer)
BEGIN
select fname,id,lname from details where id < 10;
END $$
DELIMITER ;
删除过程(如果存在)`testing`.`getlogindetails`$$
CREATE DEFINER=`root`@`localhost`过程`getlogindetails`(在inusername中)
varchar(100),在inloginid整数中)
开始
从id<10的详细信息中选择fname、id、lname;
结束$$
定界符;
您遇到了什么错误?你做了什么来调试这个?您是否验证了self.txt\u user.get()
和self.txt\u pass.get()
正在返回您认为应该返回的内容?另外,您是否确定在某些情况下,cur.rowcount
可以返回None
而不是零?
DROP PROCEDURE IF EXISTS `testing`.`getlogindetails` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getlogindetails`(in inusername
varchar(100),in inloginid integer)
BEGIN
select fname,id,lname from details where id < 10;
END $$
DELIMITER ;