我已经与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,但无济于事。
我想念什么?
答案 0 :(得分:1)
尝试在autorollback=True
类中设置Database
。您可以关注文档here
您的问题在this issue
中已经知道答案 1 :(得分:1)
虽然可以使用自动回滚,但显式管理事务要好得多,这样可以在发生完整性错误的地方捕获错误并显式回滚。例如,如果您有一个用户注册页面,并且用户名有一个唯一的约束,则可以将其包装在try / except中,并在失败时回滚。