查看: 1591|回复: 4

DatabaseError: current transaction is aborted

[复制链接]

11

主题

63

帖子

159

积分

注册会员

Rank: 2

积分
159
发表于 2018-9-18 15:12:37 | 显示全部楼层 |阅读模式
本帖最后由 天使与魔鬼 于 2018-9-18 15:49 编辑

我收到很多错误消息:
"DatabaseError: current transaction is aborted, commands ignored until end of transaction block"
把Django项目的数据库引擎python-psycopg改为python-psycopg2。
代码保持不变,只是不知道这些错误来自哪里。
回复

使用道具 举报

9

主题

74

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2018-9-18 15:14:14 | 显示全部楼层
这是postgres在查询时产生的错误,并且你尝试在没有先回滚事务的情况下运行另一个查询。要修复它,您需要弄清楚代码中执行错误查询的位置。在postgresql服务器中使用log_statement和log_min_error_statement选项可能会有所帮助。
回复

使用道具 举报

10

主题

72

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2018-9-18 15:15:22 | 显示全部楼层
要解决该错误,请在修复代码后回滚最后一个(错误的)事务:
from django.db import transaction
transaction.rollback()
可以使用try-except来防止错误发生:
from django.db import transaction, DatabaseError
try:
    a.save()
except DatabaseError:
    transaction.rollback()
回复

使用道具 举报

11

主题

80

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2018-9-18 15:16:13 | 显示全部楼层
我遇到了同样的问题。我在这里遇到的问题是我的数据库没有正确同步。简单的问题似乎总是引起最大的焦虑......
要在app目录中,在终端内同步的django数据库,请键入:
$ python manage.py syncdb
编辑:请注意,如果您使用的是django-south,则运行'$ python manage.py migrate'命令也可以解决此问题。
快乐的编码!
回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-18 15:17:40 | 显示全部楼层
根据我的经验,这些错误就是这样发生的:
try:
    code_that_executes_bad_query()
    # transaction on DB is now bad
except:
    pass

# transaction on db is still bad
code_that_executes_working_query() # raises transaction error
第二个查询没有任何问题
编辑:只有当except子句捕获IntegrityError(或任何其他低级数据库异常)时才会发生这种情况,如果你发现类似DoesNotExist这样的错误将不会出现,因为DoesNotExist不会破坏事务。
这里的教训是不要尝试/ except / pass。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表