问题
我必须使用sqlalchemy更新Postgres数据库中的多个记录R1, R2, ..., Rn
。操作必须是原子的;即,如果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交易错误?理想情况下,我想为每个失败的记录收到错误。如果这是不可能的,我想得到失败的记录号及其正确的错误消息。