我想将大量条目(~600k)上传到 PostgreSQL 数据库中的一个简单表中,每个条目有一个外键、一个时间戳和 3 个 float 。但是,每个条目需要 60 毫秒来执行描述的核心批量插入 here ,因此整个执行需要 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语句实现大插入?
感谢您的帮助!
最佳答案
与此同时,通过 create_engine()
函数上的 use_batch_mode
标志,这成为可能(从 SqlAlchemy 1.2.0 开始)。查看docs .它使用 psycopg.extras
中的 execute_batch()
函数。
关于python - 如何在 sqlalchemy 中使用 psycopg2.extras?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317376/