假设我们有以下代码(在带有 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/