Python 如何知道在Postgres批量更新事务中哪个记录失败
问题 我必须使用sqlalchemy更新Postgres数据库中的几个记录。操作必须是原子的;i、 例如,如果Python 如何知道在Postgres批量更新事务中哪个记录失败,python,postgresql,error-handling,sqlalchemy,nested-transactions,Python,Postgresql,Error Handling,Sqlalchemy,Nested Transactions,问题 我必须使用sqlalchemy更新Postgres数据库中的几个记录。操作必须是原子的;i、 例如,如果Ri失败,则必须回滚整个事务 代码如下所示: try: for instance_id in payload: instance = get_or_404(instance_id) sql = build_sql_for_patch(instance, payload) db.session.add(sql) db.sess
Ri
失败,则必须回滚整个事务
代码如下所示:
try:
for instance_id in payload:
instance = get_or_404(instance_id)
sql = build_sql_for_patch(instance, payload)
db.session.add(sql)
db.session.commit()
except Exception:
db.session.rollback()
raise ValueError(...)
如果出现错误,我希望返回如下消息:
{
"errors": [
{"record": 1, "reason": "Something is wrong with record 1."},
{"record": 4, "reason": "Something is wrong with record 4."},
...
]
}
问题
有没有一种方法可以获得这种粒度的Postgres事务错误?理想情况下,我希望每个失败的记录都有一个错误。如果这是不可能的,我希望获取失败的记录号,并显示正确的错误消息。如果没有其他错误,您可以尝试在保存点中进行每次插入,设置一个控制是回滚还是提交的标志。不过,它的性能不是很好,所以对于大批量操作来说,它的速度会很慢。我来看看SAVEPOINT,谢谢!如果您这样做了,下面是关于该主题的SQLA文档: