2016-03-08 3 views
0

Я хочу установить тайм-аут для запроса базы данных, чтобы он мог обрабатывать некоторые запросы, заблокированные аномально долгое время.Как установить время ожидания запроса базы данных django для 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), кажется, только для связи. (В моем случае он будет иметь постоянные соединения)

Любые предложения?

ответ

0

Я мог бы сделать это через настройку клиента оракула на sqlnet.ora, а не на Django.

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

Так что Джанго вернуться djang.db.DatabaseError Exception с кодом ошибки оракула, когда он достигает таймаут я указать (здесь 10 секунд)

Вы можете получить код ошибки оракула как ниже

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