Django如何在DatabaseError后重新连接:查询超时

Posted

技术标签:

【中文标题】Django如何在DatabaseError后重新连接:查询超时【英文标题】:Django how to reconnect after DatabaseError: query timeout 【发布时间】:2011-05-25 18:04:03 【问题描述】:

我有一个使用 Django ORM 读取/写入 Postgre 的独立脚本。

我偶尔会收到此错误

DatabaseError: 查询超时服务器 意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间。

我需要重新建立连接并重试脚本中的处理代码,但似乎找不到方法。以下代码在重试时引发“接口错误:连接已关闭”,因此它不起作用。

for repeat in range(5):
    try:
        .....................PROCESSING CODE...................
    except DatabaseError, e:
        time.sleep(30)
    else:
        break
else:
    return

有什么想法吗?

【问题讨论】:

【参考方案1】:

我有类似的需要重新创建数据库连接,我正在尝试以下黑魔法来重置 django 1.3 中的连接:

from django.db import connection
connection.connection.close()
connection.connection = None

我没有方便的 PostgreSQL 来尝试这个,但它似乎至少适用于 mysql 和 sqlite。此外,如果您使用的是多数据库,则必须对 django.db.connections 字典中的特定连接执行此步骤。

【讨论】:

我不再为这个问题所困扰。如果其他人验证此答案是正确的解决方案,我会标记它。谢谢你的回答。 @kakarukeys 这对我有用。 (Django 1.4 和使用 postgresql) 在与 seyeong jeong 相同的设置中也适用于我。 使用 django 1.5 和 postgresql 9.3 为我工作 :)

以上是关于Django如何在DatabaseError后重新连接:查询超时的主要内容,如果未能解决你的问题,请参考以下文章

(DatabaseError: no such table: django_session) Django 1.3 selenium 测试期间的错误

Django South 向管理员添加了模型,但给出了 DatabaseError

Django DatabaseError:关系“django_site”

Django DatabaseError timedelta的无效连接器

Django DatabaseError - 没有这样的保存点

尝试重置密码时出现 Djongo + Django + MongoDB Atlas DatabaseError