我试图使用SQLAlchemy截断一个表,只插入大约3000行数据,而且速度非常慢(大约10分钟)。在
我遵循了关于这个doc的建议,并利用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
)
不久前,我在公司工作时一直在为这个问题而努力,所以我们创建了一个库,其中包含了批量插入和更新的功能。希望我们已经考虑了所有的性能和安全问题。这个库是开源的,在PyPI上可用,它的名称:
bulky
。在我来给你举几个用法的例子:
插入:
更新:
^{pr2}$不确定是否允许链接,所以我会把它们放在扰流板下面
当我看到这个没有答案的时候我很沮丧。。。前几天我遇到了完全相同的问题:尝试使用CORE向postgresrds实例大容量插入大约数百万行。这花了小时。在
作为一种解决方法,我最终编写了自己的大容量插入脚本,该脚本本身生成了原始sql:
虽然很难看,但这给了我所需的性能(大约500000行/分钟)
你找到基于核心的解决方案了吗?如果没有,希望这有帮助!在
更新:最后把我的旧脚本移到一个备用的EC2实例中,这个实例实际上解决了性能慢的问题。不确定您的设置是什么,但显然在通过外部(非AWS)连接与RDS通信时会有网络开销。在
相关问题 更多 >
编程相关推荐