从Django中的失效数据库连接中恢复

乔什·库珀什密特(Josh Kupershmidt)

假设我们有以下代码(在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Django中的失效数据库连接中恢复

来自分类Dev

数据库连接失效

来自分类Dev

在Django Shell中连接到其他数据库

来自分类Dev

在Django中创建只读MySQL数据库连接

来自分类Dev

Django中的其他非模型数据库连接

来自分类Dev

在Django Shell中连接到其他数据库

来自分类Dev

如何在 django 1.10.6 中连接 MySQL 数据库

来自分类Dev

GeoServer中的数据库连接

来自分类Dev

在netbeans中连接oracle数据库

来自分类Dev

连接枪数据库中的同伴

来自分类Dev

单调中的数据库连接

来自分类Dev

连接SQL数据库中的表

来自分类Dev

在Android中连接SQLite数据库

来自分类Dev

Java中的动态数据库连接

来自分类Dev

在Swift中连接SQLite数据库

来自分类Dev

nodejs中的数据库连接安全

来自分类Dev

Laravel 中的数据库连接

来自分类Dev

我该如何从可能失效的硬盘中恢复数据

来自分类Dev

从旧的WAMP目录中恢复数据库

来自分类Dev

无法恢复存储在MySQL数据库中的URL

来自分类Dev

在 docker 容器中恢复数据库

来自分类Dev

如何将EC2中的Django连接到RDS中的Postgres数据库?

来自分类Dev

在单元测试之间恢复数据库:数据库仍在使用中

来自分类Dev

在Django中获取数据库类型

来自分类Dev

Django中的动态数据库表

来自分类Dev

Django中的动态数据库路由

来自分类Dev

数据库中的Django更新对象

来自分类Dev

在Django中重置SQLite数据库

来自分类Dev

CSV到Django中的数据库