为什么在使用pegreee ORM和posgresql的一个失败命令之后,为什么所有后续命令都出现peewee.InternalError?

时间:2018-10-19 19:51:27

标签: python postgresql peewee

我已经与peewee和postgresql广泛合作了几个月。突然,这开始发生。如果我运行任何查询命令并遇到错误,则所有后续命令将开始返回+------------+-------------+ | ?candidate | ?valid_path | +------------+-------------+ | :candi1 | :path1 | | :candi2 | :path2 | +------------+-------------+

我认为这种行为是在将peewee从3.5.2升级到3.7.2时开始的,但是此后我将其降级,并且这种行为仍在继续。这肯定并非总是如此。

在最简单的情况下,我有一个仅包含一条记录的数据库表。我尝试创建一个具有相同ID的新记录,并按预期得到peewee.InternalError: current transaction is aborted, commands ignored until end of transaction block。然后,如果我尝试在该数据库上运行任何其他查询命令,则会得到上面的IntegrityError

使用sqlite数据库不会发生这种情况。

我已经重新安装了peewee和psycopg2,但无济于事。

我想念什么?

2 个答案:

答案 0 :(得分:1)

尝试在autorollback=True类中设置Database。您可以关注文档here

您的问题在this issue

中已经知道

答案 1 :(得分:1)

虽然可以使用自动回滚,但显式管理事务要好得多,这样可以在发生完整性错误的地方捕获错误并显式回滚。例如,如果您有一个用户注册页面,并且用户名有一个唯一的约束,则可以将其包装在try / except中,并在失败时回滚。