python - 从 Django 中的死数据库连接中恢复

标签 python django postgresql

假设我们有以下代码(在带有 PostgreSQL 后端的 Django 1.6 上测试过):

from django.db import connection
from django.db.utils import OperationalError

cursor = connection.cursor()

try:
    # kill our own database connection
    cursor.execute('SELECT pg_terminate_backend(pg_backend_pid())');
except OperationalError:
    # Is it possible to get a fresh connection here?
    cursor = connection.cursor() # not useful
    # Will result in:
    # django.db.utils.InterfaceError: connection already closed
    cursor.execute('SELECT 1;')

显然,此代码仅用于示例目的——在现实世界中,我并不是故意终止我自己的连接,但我的连接可能会被数据库终止(OOM killer 、数据库管理员清理房间、重新启动整个数据库等)。有什么方法可以从现在终止的数据库连接中恢复,以某种方式强制 Django 建立新连接?

最佳答案

在重新获取光标之前关闭连接。 Django 将尝试重新连接到数据库:

try:
    ...
except OperationalError:
    connection.close()
    cursor = connection.cursor()

关于python - 从 Django 中的死数据库连接中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720874/

相关文章:

python - 尝试使用 mysqldump 导出数据库时,是什么导致 subprocess.call 输出空白文件?

python - 将 CMakeLists.txt、boost-python 与 python setuptools 相结合

sql - 为什么 PL/pgSQL 函数可以有副作用,而 SQL 函数不能?

sql - 如何更新postgresql中的xml数据类型列

c# - 映射到关系类型时 EF Core 3 添加迁移失败

python - Docker下PyAudio没有声音

Python kivy存储模块

python - Django查询集按具有不同的相关模型排序

Django-admin collectstatic 是一个未知命令

Django apache-wsgi 配置问题