我有一个使用docker在服务器上运行的python龙卷风模块。
我有一个python文件,可通过Web套接字与我的Java脚本项目通信。然后,此python文件与与我的SQL Server通信的第二个python文件通信。
问题是,如果由于查询错误而从SQL Server返回错误,则连接池的连接将挂起,并且连接池很快就会变满,从而破坏了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()
答案 0 :(得分:1)
为什么不添加另一个try:到您的database_manager.log()
try:
cursor.execute(query, list(my_dict.values()))
except Exception,e:
print "Error"
else:
connector.commit()
finally:
cursor.close()
connector.close()
更好地处理错误,但这只是您可以做什么的概述。