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

how to set django database request timeout for oracle

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

我首先尝试了以下带有 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' is an invalid keyword argument for this function

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

有什么建议吗?

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

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

因此 Django return djang.db.DatabaseError 当达到我指定的超时时出现 oracle 错误代码异常(这里是 10 秒)

您可以得到如下的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