【问题标题】:Efficient insert of multiple rows with SQLAlchemy/SQLite3 when duplicate entries exist存在重复条目时使用 SQLAlchemy/SQLite3 高效插入多行
【发布时间】:2011-04-20 22:58:17
【问题描述】:

我正在使用 SQLAlchemy 将多行插入到 SQLite3 表中,并且这些条目经常已经在表中。一次插入一行非常慢,如果该行已经存在,则捕获异常并继续。有没有一种有效的方法来做到这一点?如果该行已经存在,我什么都不想做。

【问题讨论】:

  • 你能发布一个代码示例吗?我想确切地了解您要达到的目标。谢谢。

标签: python sqlite sqlalchemy


【解决方案1】:

您可以使用 SQL 语句

INSERT OR IGNORE INTO ... etc. ...

如果插入是重复的,则简单地忽略它。了解IGNORE 冲突子句here

也许您可以在 SQLAlchemy 中将 OR IGNORE 用作 prefix Insert -- 有关如何在 SQL 语句中将 OR IGNORE 置于 INSERTINTO 之间的文档是 here

【讨论】:

    【解决方案2】:

    如果您乐于运行“本机”sqlite SQL,您可以这样做:

    REPLACE INTO my_table(id, col2, ..) VALUES (1, 'value', ...);
    REPLACE INTO my_table(...);
    ...
    COMMIT
    

    但是,这不能在所有 DBMS 中移植,因此在一般 sqlalchemy 方言中找不到它的原因。

    您可以做的另一件事是使用 SQLAlchemy ORM,定义一个“域模型”——一个映射到您的数据库表的 python 类。然后,您可以创建域类的许多实例,并在您希望插入(或忽略)的每个项目上调用 session.save_or_update(domain_object),最后在要插入(或忽略)项目时调用 session.commit()到您的数据库表。

    这个问题看起来与SQLAlchemy - INSERT OR REPLACE equivalent重复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多