python - 抛出错误后关闭连接
问题描述
我有一个使用 docker 通过服务器运行的 python 龙卷风模块。
我有一个使用 web 套接字与我的 java 脚本项目通信的 python 文件。然后,此 python 文件与与我的 SQL 服务器通信的第二个 python 文件进行通信。
问题是,如果由于查询错误而从 SQL 服务器返回错误,则与连接池的连接挂起,并且很快连接池就变满了,从而破坏了 JS 项目的功能
我查看了一些指南和 SO 问题,但找不到解决此问题的指南
我的 server.py 文件中的常用函数如下:
def log_training(self, message_data):
message_type = "training_failed"
try:
database_manager.log("training", message_data)
message_type = "training_successful"
except:
tb = traceback.format_exc()
print("Traceback | Training Log\t| ", "\t\t", "| Error: ", tb)
self.send_message(message_type, "")
并且 database_manager.log() 函数是:
def log(self, table_name, my_dict):
connector = self.cnxpool.get_connection()
cursor = connector.cursor(buffered=True, dictionary=True)
columns = ', '.join(my_dict.keys())
values = ", ".join(["%s"] * len(my_dict))
query = """INSERT INTO {table} ({columns}) VALUES ({values});""".format(table=table_name, columns=columns, values=values)
print("SQL\t\t| Query: " , query)
print("SQL\t\t| Columns: ", columns)
print("SQL\t\t| Values: ", my_dict.values())
cursor.execute(query, list(my_dict.values()))
connector.commit()
cursor.close()
connector.close()
因此,如果 database_manager.log() 返回异常,则永远不会调用 connector.close()
解决方案
为什么不添加另一个尝试:到您的 database_manager.log()
try:
cursor.execute(query, list(my_dict.values()))
except Exception,e:
print "Error"
else:
connector.commit()
finally:
cursor.close()
connector.close()
更好地处理错误,但这是您可以做什么的概述。
推荐阅读
- ruby - Amazon Selling Partner API - 签名请求(ruby 实施)
- c# - 必须将数据保存在列表数组[]中。首先检查两个列表数组与它们相交并给出剩余的值
- c# - TeamsBot - 如何从对话更新事件中获取团队 ID?
- r - 如何添加一列来识别 R 中值的特定组合?
- amazon-web-services - 计算完成后关闭一个ec2实例
- javascript - Discord.js v12 Covid Stats 命令
- java - Jackson 如何将一个 Pojo 字段映射到 2 个(json)字段(相同的内容,不同的名称)
- c# - 实体框架扩展:不能 BulkMerge 具有空标识属性的实体
- mysql - 如何在 SQL 中查找包含一个或多个空值的列的列表
- c# - 即时将原始音频字节从 NAudio 转换为 wav 字节