def login_in(self): account = self.ui.lineEdit_L_account.text() password = self.ui.lineEdit_L_password.text() account_list = [] password_list = [] conn = pymysql.connect( user='root', password='796691xjl@', host='127.0.0.1', database='mysql', port=3306 ) cur = conn.cursor() cur.execute('SELECT * FROM films.manger') rows = cur.fetchall() for row in rows: account_list.append(row[0]) password_list.append(row[1]) print(account_list, password_list) conn.commit() conn.close() for i in range(len(account_list)): if len(account) == 0 or len(password) == 0: self.ui.stackedWidget.setCurrentIndex(1) elif account == account_list[i] and password == password_list[i]: global manger_now manger_now = account self.win = MainWindow() self.close() else: self.ui.stackedWidget.setCurrentIndex(2) print("wrong")
时间: 2024-02-14 15:06:17 浏览: 62
这段代码的作用是连接 MySQL 数据库,查询 manger 表中的账号和密码数据,并与用户输入的账号和密码进行比较,如果匹配则显示 MainWindow 窗口,否则显示错误提示。
在这段代码中,我发现有一个问题,就是如果 manger 表中没有任何数据,account_list 和 password_list 都将为空列表,此时 for 循环将不会执行任何操作,因此登录过程将会失败。为了解决这个问题,你可以在 for 循环前添加一个 if 语句来检查是否有数据,例如:
```
cur.execute('SELECT * FROM films.manger')
rows = cur.fetchall()
if len(rows) == 0:
self.ui.stackedWidget.setCurrentIndex(2)
print("No data found")
else:
for row in rows:
account_list.append(row[0])
password_list.append(row[1])
for i in range(len(account_list)):
# 省略后续代码
```
这样修改后,如果 manger 表中没有任何数据,登录界面将会显示错误提示。
相关问题
def login_in(self): account = self.ui.lineEdit_L_account.text() password = self.ui.lineEdit_L_password.text() account_list = [] password_list = [] conn = pymysql.connect( user='root', pa
我理解你的问题是询问关于给定的代码段中的 pymysql 连接的使用方式。这是一个用于 Python 的 MySQL 数据库的库。该代码段中,使用 pymysql.connect() 函数连接数据库,其中需要提供用户名和密码等信息。具体来说,该函数接受以下参数:
- host: 数据库服务器主机名,默认为本地主机。
- port: 数据库服务器端口号,默认为 3306。
- user: 数据库用户名。
- password: 数据库用户密码。
- database: 数据库名称。
- charset: 数据库字符集,默认为 utf8mb4。
- cursorclass: 游标类,默认为 pymysql.cursors.Cursor。
在该代码段中,除了用户名和密码外,其他信息使用了默认值,因此只需要提供用户名和密码即可连接到 MySQL 数据库。
def login_in(self, MainWindow=None): account = self.ui.lineEdit_L_account.text() password = self.ui.lineEdit_L_password.text() account_list = [] password_list = [] conn = pymysql.connect( user='root', password='796691xjl@', host='127.0.0.1', database='mysql', port=3306 ) cur = conn.cursor() cur.execute("SELECT * FROM films.manger") rows = cur.fetchall() for row in rows: account_list.append(row[0]) password_list.append(row[1]) print(account_list, password_list) conn.commit() conn.close() for i in range(len(account_list)): if len(account) == 0 or len(password) == 0: self.ui.stackedWidget.setCurrentIndex(1) elif account == account_list[i] and password == password_list[i]: global manger_now manger_now = account self.win = MainWindow() self.close() else: self.ui.stackedWidget.setCurrentIndex(2)密码输入对了也错
这段代码是一个用户登录的函数。它首先获取用户在界面中输入的账号和密码,然后连接到MySQL数据库中的films库中的manger表,并通过执行SELECT语句来获取所有账号和密码。接着,它将这些账号和密码分别存储到account_list和password_list两个列表中。最后,它通过循环比较输入的账号和密码是否与列表中的账号和密码匹配,如果匹配则将当前登录用户保存到全局变量manger_now中,并打开MainWindow窗口,否则在界面中提示用户输入有误。
根据你的问题,我猜测你想问的是:为什么在输入正确的密码后也会跳转到错误界面。
这个问题可能是由于在比较账号和密码时没有考虑到列表中的项数,导致在最后一项比较失败后,会直接跳转到错误界面。为了避免这种情况,可以将最后一次比较和跳转操作放到循环外面,这样只有在所有项都比较完后,才能确定账号和密码输入是否正确。代码示例如下:
```
for i in range(len(account_list)):
if account == account_list[i] and password == password_list[i]:
global manger_now
manger_now = account
self.win = MainWindow()
self.close()
break # 添加 break 语句,跳出循环
if manger_now is None: # 在循环外面判断账号和密码是否输入正确
self.ui.stackedWidget.setCurrentIndex(2)
```
阅读全文