如何为oracle设置django数据库请求超时

时间:2016-03-08 09:04:30

标签: python-2.7 oracle11g django-1.8

我想为数据库请求设置超时,以便它可以处理长时间异常阻止的某些请求。

我首先使用connect_timeout属性尝试了以下配置。

DATABASES = {
             'default': {
                         'ENGINE': 'django.db.backends.oracle',
                         'NAME': 'orcl',
                         'USER': 'smkim',
                         'PASSWORD': '1123',
                         'HOST': '168.192.15.18',
                         'OPTIONS' : {
                                      "connect_timeout": 60,
                                      },
                         'CONN_MAX_AGE' : 60,
                         'PORT': '1521',
                         }
             }

但是,似乎无法返回此异常。

  

TypeError:'connect_timeout'是一个无效的关键字参数   功能

此外,由于属性(connect_timeout)似乎仅用于连接,因此不是我想要的。 (在我的例子中,它将具有持久连接)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我可以通过sqlnet.ora上的oracle客户端设置而不是Django来完成。

SQLNET.SEND_TIMEOUT = 10  # in seconds
SQLNET.RECV_TIMEOUT = 10  # in seconds

当Django达到我指定的超时(在这里10秒)时,使用oracle错误代码返回djang.db.DatabaseError异常

您可以获得如下所示的oracle错误代码

try:
   models.A.objects.get(id=1)  # In here, timeout occur

except django.db.DatabaseError as e:
   oracleErr = e.args[0]
   print 'errorMsg  : %s' % oracleErr.message
   print 'errorCode : %d' % oracleErr.code