SQLAlchemy IntegrityError和批量数据导入

Hom*_*lli 6 python sqlalchemy

我将几个10k记录插入到具有REF完整性规则的数据库中.遗憾的是,一些数据行是重复的(因为它们已经存在于数据库中).在插入之前检查数据库中每一行的存在是太昂贵了所以我打算继续处理SQLAlchemy抛出的IntegrityError异常,记录错误然后继续.

我的代码看起来像这样:

# establish connection to db etc.

tbl = obtain_binding_to_sqlalchemy_orm()
datarows = load_rows_to_import()

try:
    conn.execute(tbl.insert(), datarows)
except IntegrityError as ie:
    # eat error and keep going
except Exception as e:
    # do something else
Run Code Online (Sandbox Code Playgroud)

我在上面做的(隐式)假设是SQLAlchemy没有将多个插入滚动到一个事务中.如果我的假设是错误的,则意味着如果发生IntegrityError,则插入的其余部分将被中止.任何人都可以确认上面的伪代码"模式"是否会按预期工作 - 或者我最终会因抛出IntegrityError异常而丢失数据?

此外,如果有人有更好的想法,我会有兴趣听到它.

mat*_*ata 2

如果您之前没有启动任何事务,它可能会像这样工作,在这种情况下,sqlalchemy 的自动提交功能将启动。但您应该按照链接中的描述进行显式设置。