Res*_*ieC 2 python postgresql orm sqlalchemy
我正在尝试截断一个表并使用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)
当我看到这没有答案时,我感到无比沮丧。前几天,我遇到了完全相同的问题:尝试使用CORE向Postgres RDS实例批量插入数百万行。这花了几个小时。
作为一种解决方法,我最终编写了自己的批量插入脚本,该脚本生成了原始sql本身:
bulk_insert_str = []
for entry in entry_list:
val_str = "('{}', '{}', ...)".format(entry["column1"], entry["column2"], ...)
bulk_insert_str.append(val_str)
engine.execute(
"""
INSERT INTO my_table (column1, column2 ...)
VALUES {}
""".format(",".join(bulk_insert_str))
)
Run Code Online (Sandbox Code Playgroud)
虽然很丑陋,但这却给了我所需的性能(〜500,000行/分钟)
您找到基于CORE的解决方案了吗?如果没有,希望对您有所帮助!
更新:最终将我的旧脚本移到了我们未使用的备用EC2实例中,该实例实际上解决了性能降低的问题。不确定您的设置是什么,但是从外部(非AWS)连接与RDS进行通信显然会产生网络开销。