gpt4 book ai didi

python - pymysql.err.错误 : Already closed

转载 作者:太空狗 更新时间:2023-10-30 02:55:06 27 4
gpt4 key购买 nike

我正在尝试创建一个登录功能。但它只适用于那些。例如,当我输入错误的用户 ID 和密码时,在取消该消息并提供正确的用户 ID 和密码后,我得到了正确的错误消息“无法登录”,然后我得到“pymysql.err.Error: Already closed”,下面是示例代码.

import pymysql

# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='',
db='python_code',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
class LoginModel:
def check_user(self, data):

try:
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `username` FROM `users` WHERE `username`=%s"
cursor.execute(sql, (data.username))
user = cursor.fetchone()
print(user)

if user:
if (user, data.password):
return user
else:
return False
else:
return False

finally:
connection.close()

最佳答案

您创建连接的次数(一次)和关闭连接的次数(每次登录尝试一次)不匹配。

一个解决方法是移动您的:

connection = pymysql.connect(host='localhost',
user='root',
password='',
db='python_code',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

进入你的def check__user()。它会起作用,因为你会在每次调用时创建和关闭连接(正如其他人所指出的,finally 子句总是被执行。)

这不是一个很好的设计,因为获取数据库连接往往相对昂贵。因此,最好在方法的外部 保持连接创建....这意味着您必须删除方法内的connection.close()

我认为您混淆了 connection.close()cursor.close()。你想做后者,而不是前者。在您的示例中,您不必显式关闭游标,因为这会自动发生在您的 with connection.cursor() as cursor: 行中。

finally 更改为 except,或者完全删除 try block 。

关于python - pymysql.err.错误 : Already closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com