我想将大量条目(〜600k)上传到PostgreSQL DB的一个简单表中,每个条目有一个外键,一个时间戳和3个浮点数。但是,每个条目要花费60毫秒才能执行此处所述的核心批量插入操作,因此整个执行过程将花费10个小时。我发现,这是executemany()方法的性能问题,但是已经用psycopg2 2.7中的execute_values()方法解决了。
我运行的代码如下:
#build a huge list of dicts, one dict for each entry
engine.execute(SimpleTable.__table__.insert(),
values) # around 600k dicts in a list
Run Code Online (Sandbox Code Playgroud)
我看到这是一个普遍的问题,但是我还没有设法在sqlalchemy本身中找到解决方案。有什么方法可以告诉sqlalchemy execute_values()在某些情况下调用吗?还有其他方法可以实现巨大的插入而无需自己构造SQL语句吗?
谢谢您的帮助!
我正在尝试截断一个表并使用SQLAlchemy仅插入约3000行数据,这非常慢(约10分钟)。
我遵循了此文档上的建议,并利用了sqlalchemy核心来进行插入,但是运行速度仍然非常慢。我有哪些可能的罪魁祸首?数据库是一个postgres RDS实例。谢谢!
engine = sa.create_engine(db_string, **kwargs, pool_recycle=3600)
with engine.begin() as conn:
conn.execute("TRUNCATE my_table")
conn.execute(
MyTable.__table__.insert(),
data #where data is a list of dicts
)
Run Code Online (Sandbox Code Playgroud)