Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当存在重复条目时,使用SQLAlchemy/SQLite3高效插入多行_Python_Sqlite_Sqlalchemy - Fatal编程技术网

Python 当存在重复条目时,使用SQLAlchemy/SQLite3高效插入多行

Python 当存在重复条目时,使用SQLAlchemy/SQLite3高效插入多行,python,sqlite,sqlalchemy,Python,Sqlite,Sqlalchemy,我使用SQLAlchemy将多行插入到SQLite3表中,通常这些条目已经在表中了。一次插入一行非常慢,如果行已经存在,则捕获异常并继续。有没有一种有效的方法可以做到这一点?如果行已经存在,我不想做任何事情。您可以使用SQL语句 INSERT OR IGNORE INTO ... etc. ... 如果插入是重复的,则忽略它。了解忽略冲突子句 也许您可以在SQLAlchemy中使用或IGNORE作为前缀Insert——关于如何在SQL语句中Insert和INTO之间放置或IGNORE的文档是如

我使用SQLAlchemy将多行插入到SQLite3表中,通常这些条目已经在表中了。一次插入一行非常慢,如果行已经存在,则捕获异常并继续。有没有一种有效的方法可以做到这一点?如果行已经存在,我不想做任何事情。

您可以使用SQL语句

INSERT OR IGNORE INTO ... etc. ...
如果插入是重复的,则忽略它。了解
忽略
冲突子句


也许您可以在SQLAlchemy中使用
或IGNORE
作为
前缀
Insert
——关于如何在SQL语句中
Insert
INTO
之间放置
或IGNORE
的文档是如果您愿意运行“本机”sqlite SQL,您可以执行以下操作:

REPLACE INTO my_table(id, col2, ..) VALUES (1, 'value', ...);
REPLACE INTO my_table(...);
...
COMMIT
但是,这不会在所有DBMS中都是可移植的,因此在一般的sqlalchemy方言中找不到它

您可以做的另一件事是使用SQLAlchemy ORM,定义一个“域模型”——一个映射到数据库表的python类。然后,您可以创建域类的多个实例并调用会话。在每个要插入(或忽略)的项上保存\u或\u更新(域\u对象),并在要将项插入(或忽略)到数据库表时,最后调用session.commit()


这个问题看起来像是重复的

你能发布一个代码示例吗?我想看看你到底想达到什么目的。谢谢