假设我们有以下代码(在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杀手,数据库管理员打扫房子,重新启动整个数据库)数据库等)。我有什么办法可以从现在终止的数据库连接中恢复,从而以某种方式迫使Django建立新的连接?
在重新获取光标之前,请先关闭连接。Django将尝试重新连接到数据库:
try:
...
except OperationalError:
connection.close()
cursor = connection.cursor()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句