【发布时间】:2019-08-02 16:14:06
【问题描述】:
我正在尝试在 for 循环中使用 psycopg2 INSERT 将 Pandas 数据帧中的 (source_lat, source_long,destination_lat,destination_long) 行插入到 PostgreSQL 表 (gmaps) 中。该表有一个完整性约束,可防止插入重复的(source_lat、source_long、destination_lat、destination_long)行,因此我使用 try except 块捕获任何重复项。我的代码如下。
我正在遍历数据帧中的每一行(大约 100000 行)并在每一行上调用 cursor.execute(INSERT),看看是否会引发完整性错误,如果没有,我会在 gmaps 中插入该行桌子。
但是,这段代码需要很长时间才能运行 - 我怎样才能加快它的速度?我不确定开销在哪里?谢谢!
Ele 是一个包含 (source_lat, source_long,destination_lat,destination_long) 的元组
for ele in coordinates:
#Inserts new row to table
try:
cursor.execute('INSERT INTO gmaps (source_latitude, source_longitude, destination_latitude, destination_longitude) VALUES (%s, %s, %s, %s)', (ele[0], ele[1], ele[2], ele[3])))
except psycopg2.IntegrityError:
conn.rollback()
else:
conn.commit()
【问题讨论】:
-
不是代码而是数据库拒绝了这个动作。直接往数据库中插入值可以试试看是否快。
-
执行 100000 个单独的 INSERT 语句会很慢。没办法。
标签: python pandas postgresql psycopg2