首页 > 解决方案 > 如何部分回滚?

问题描述

我目前从第三方 API 填充数据库,该 API 涉及下载包含多个 SQL INSERT//语句的文件DELETEUPDATE然后将它们解析为 SQLAlchemy ORM 对象以加载到我的数据库中。

这些文件通常可能包含我尝试在某些完整性检查中构建的错误。我目前正在努力解决的特定问题是重复记录 - 基本上是接收一个文件以插入当前存在的记录。为了避免这种情况,我在形成复合主键的字段上放置了一个唯一索引。但是,这意味着在使用 SQL 语句处理文件时出现错误,该语句尝试复制记录并且随后发出flushor 。commit

在处理给定文件的所有 SQL 语句之前,我不想将记录提交到数据库,这样我就可以跟踪已处理的内容。我在想我可以在每条语句的处理结束时发出 a flush,然后如果由于重复记录而失败,则可以进行一些错误处理。这将包括绕过违规声明。但是,据我了解,当我只想跳过重复的语句时,发出 a的文档将取消之前已处理的所有语句。rollback

是否可以选择以某种方式部分回滚,或者我是否需要预先构建一个查询数据库以检查执行 SQL 语句是否会创建重复记录?

标签: pythonmysqlsqlalchemy

解决方案


推荐阅读