【发布时间】:2017-09-05 03:43:45
【问题描述】:
我想将大量条目(~600k)上传到 PostgreSQL 数据库中的一个简单表中,每个条目有一个外键、一个时间戳和 3 个浮点数。但是,每个条目执行here 描述的核心批量插入需要 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
我发现这是一个常见问题,但是我还没有设法在 sqlalchemy 本身中找到解决方案。有没有办法告诉 sqlalchemy 在某些情况下调用execute_values()?有没有其他方法可以在不自己构建SQL语句的情况下实现大插入?
感谢您的帮助!
【问题讨论】:
-
我正要建议使用
SimpleTable.__table__.insert().values(values),它会编译成带有多个VALUES 元组的单个INSERT 语句,但事实证明它在我的机器上实际上更慢。编译本身与使用依赖于executemany()的方法一样慢。
标签: python python-3.x sqlalchemy psycopg2