【发布时间】:2017-01-20 04:45:50
【问题描述】:
我正在尝试使用 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
)
【问题讨论】:
-
你有主键吗?这是很多交叉引用的表吗?插入 3k 行的 10 分钟似乎非常多……一行有多大?您的数据库正在远程运行(即不是本地主机……)(这肯定会减慢速度……多少,可能取决于网络延迟) ?
-
是的,我有一个主键,我通过 sa/alembic 将其设置为大小为 100 的自然键字符串。但是我也尝试使用代理整数键将其切换出来,并且遇到了类似的性能问题。我的行是 6 列字符串。数据库是远程的(在 AWS 中),因此网络可能与它有关
-
这使用了
executemany功能,对于psycopg2,它是execute在for循环中的美化。见this question。
标签: python postgresql orm sqlalchemy