首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的空闲数据库连接

Django中的空闲数据库连接
EN

Stack Overflow用户
提问于 2015-05-04 06:40:21
回答 1查看 1.6K关注 0票数 2

在Django中,如何使代码从已死的数据库连接中恢复?这是一种情况:

代码语言:javascript
复制
# 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中的死数据库连接中恢复,但不一样,因为我使用的连接完全是框架管理的。

只有当远程服务器/网络/防火墙丢弃空闲连接时,才会发生此问题。

EN

回答 1

Stack Overflow用户

发布于 2015-05-04 07:09:49

通常,作为开发人员,您不应该以这种方式公开Django的内部。

当Django在每个请求上建立一个连接时,它就有机会连接池连接和持久连接。

无论如何,连接都会以偶数方式超时,因此您需要一种机制来为您提供数据库连接。

池型确实是您所需要的,根据您的情况,有一些包为Oracle:https://pypi.python.org/pypi/django-oraclepool提供了连接池。

不过,我还没试过告诉你它是否有效。

更新

另外,您可以访问基础数据库游标:

代码语言:javascript
复制
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的所有好处,但这是一个解决办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30024004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档