【发布时间】:2011-04-20 22:58:17
【问题描述】:
我正在使用 SQLAlchemy 将多行插入到 SQLite3 表中,并且这些条目经常已经在表中。一次插入一行非常慢,如果该行已经存在,则捕获异常并继续。有没有一种有效的方法来做到这一点?如果该行已经存在,我什么都不想做。
【问题讨论】:
-
你能发布一个代码示例吗?我想确切地了解您要达到的目标。谢谢。
标签: python sqlite sqlalchemy
我正在使用 SQLAlchemy 将多行插入到 SQLite3 表中,并且这些条目经常已经在表中。一次插入一行非常慢,如果该行已经存在,则捕获异常并继续。有没有一种有效的方法来做到这一点?如果该行已经存在,我什么都不想做。
【问题讨论】:
标签: python sqlite sqlalchemy
如果您乐于运行“本机”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()到您的数据库表。
【讨论】: