Python 在Django中,如何设置数据库连接超时?

Python 在Django中,如何设置数据库连接超时?,python,database,django,caching,django-cache,Python,Database,Django,Caching,Django Cache,好吧,我知道事情没那么简单。我在设置中定义了两个db连接。py:default和cache。我正在使用django.core.cache中的DatabaseCache后端。我已经定义了数据库路由器,所以我可以为我的模型和缓存使用单独的数据库/模式/表。太好了 现在,有时我的缓存数据库不可用,有两种情况: 数据库崩溃时已建立到数据库的连接-这很容易-我可以使用以下方法:并将我的查询包装为: try: timelimited(TIMEOUT, self._meta.cache.get, ca

好吧,我知道事情没那么简单。我在设置中定义了两个db连接。py:
default
cache
。我正在使用
django.core.cache
中的
DatabaseCache
后端。我已经定义了数据库路由器,所以我可以为我的模型和缓存使用单独的数据库/模式/表。太好了

现在,有时我的缓存数据库不可用,有两种情况:

  • 数据库崩溃时已建立到数据库的连接-这很容易-我可以使用以下方法:并将我的查询包装为:

    try:
        timelimited(TIMEOUT, self._meta.cache.get, cache_key))
    expect TimeLimitExprired:
        # live without cache
    
  • 到数据库的连接还没有建立-所以我需要在
    timelimited
    中包含实际建立数据库连接的部分代码。但我不知道这种代码存在于何处,也不知道如何有选择地包装它(即只包装
    缓存
    连接,保留
    默认
    连接而不超时)

  • 你知道怎么做第二点吗

    请注意,此答案不正确:

    grep -R "connect_timeout" /usr/local/lib/python2.7/dist-packages/django/db
    

    没有结果,据我所知,cx_Oracle驱动程序不支持此参数。

    您是否使用Oracle作为db?@MattWriteCode-如果您没有注意到,我在问题中包含此链接,表示这根本不正确。请注意,
    Oracle/base.py
    不要修改连接设置(它只删除
    use\u returning\u into
    afair),就像其他后端一样,所以
    grep
    的结果是可预测的,但是
    connect\u timeout
    将作为arg传递给
    数据库。connect
    @alko-是的,我知道,但在cx\u Oracle文档中没有提到timeout参数(严格地说,它是在池对象中,但意义完全不同)。Oracle的理念是在服务器上设置超时,而不是在客户端设置超时,因此没有可以定义超时的客户端配置。