如何知道Postgres批量更新事务中哪条记录失败

时间:2017-07-04 13:58:32

标签: python postgresql error-handling sqlalchemy nested-transactions

问题

我必须使用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交易错误?理想情况下,我想为每个失败的记录收到错误。如果这是不可能的,我想得到失败的记录号及其正确的错误消息。

0 个答案:

没有答案