Python Django中的空闲数据库连接
在Django, 我如何使我的代码从一个死的数据库连接中恢复? 这是一个场景:Python Django中的空闲数据库连接,python,django,database,cx-oracle,Python,Django,Database,Cx Oracle,在Django, 我如何使我的代码从一个死的数据库连接中恢复? 这是一个场景: # requests enters view handler # executes code which does some synchronous tasks without any database interaction for 15min. # first database activity in this request after 15min. try: o, created = act_det
# requests enters view handler
# executes code which does some synchronous tasks without any database interaction for 15min.
# first database activity in this request after 15min.
try:
o, created = act_details.objects.get_or_create(id=1) # this line fails because of a dead database connection.
except Exception as e:
logger.error(e) # ORA-03114: not connected to ORACLE
假设我处理异常,有没有办法通过在异常块中创建一个新的数据库连接使事情回到正轨
我的问题类似于但不同,因为我使用的连接完全是框架管理的
只有当远程服务器/网络/防火墙断开空闲连接时,才会发生此问题 通常作为一名开发人员,您不应该以这种方式暴露于Django的内部 当Django在每个请求上建立连接时,它有机会同时使用池连接和持久连接 无论如何,连接都会超时,因此您需要一种机制来为您提供数据库连接 A是您真正需要的,根据您的情况,有一些软件包为Oracle提供连接池: 我还没试着告诉你它是否有效 更新 或者,您可以访问基础数据库游标:
from django.db import connections
try:
o, created = act_details.objects.get_or_create(id=1) # this line fails because of a dead database connection.
except Exception as e:
logger.error(e) # ORA-03114: not connected to ORACLE
conn = connections['oracle']
if conn.connection is None: # Attempt to get it again
with connection.cursor() as c:
c.execute("SELECT * from act_details WHERE id = %s" % [self.id])
这样一来,虽然您失去了Django ORM的所有好处,但它是一个解决方法。我同意这一点,但我真的希望在使用库之前了解如何快速解决该问题。嘿,这个链接问题是我的:-)不管您收到ORA-03114错误的原因是什么,您不能使用
connection.close()
技巧来强制Django重新建立Django.db.connection
实例吗?