【发布时间】:2019-01-28 16:53:15
【问题描述】:
我需要将 30k 行数据从 CSV 文件导入 Vertica 数据库。我尝试过的代码需要一个多小时才能完成。我想知道是否有更快的方法来做到这一点?我尝试使用 csv 进行导入,也尝试通过循环插入数据帧来进行导入,但这还不够快。事实上,它太慢了。你能帮帮我吗?
rownum=df.shape[0]
for x in range(0,rownum):
a=df['AccountName'].values[x]
b=df['ID'].values[x]
ss="INSERT INTO Table (AccountName,ID) VALUES (%s,%s)"
val=(a,b)
cur.execute(ss,val)
connection.commit()
【问题讨论】:
-
立即尝试可能是
val = (df['AccountName'].values.tolist(), df['ID'].values.tolist()),然后在没有for循环的情况下使用cur.executemany(ss, val)。那应该更快,但我不确定是否有进一步的改进。此外,缩进 1 个空格使此代码难以阅读;你确定connection.commit()绝对不在for循环中吗?犯这个错误只需要1 个空格。我建议你按照 PEP8 规则使用 4 个空格