使用Python将数据导入SQL

时间:2019-01-28 16:53:15

标签: python sql vertica

我将需要从CSV文件将3万行数据导入到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()

1 个答案:

答案 0 :(得分:2)

您要使用COPY命令(COPY)。

COPY Table FROM '/path/to/csv/file.csv' DELIMITER ',';

这比一次插入每一行要快得多。

由于您使用的是python,因此我建议使用vertica_python模块,因为它在其光标对象(vertica-python GitHub page)上具有非常方便的复制方法。

COPY与vertica-python一起使用的语法如下:

with open('file.csv', 'r') as file:
    csv_file = file.read()
    copy_cmd = "COPY Table FROM STDIN DELIMITER ','"
    cur.copy(copy_cmd, csv_file)
    connection.commit()

可以加快处理速度的另一件事是压缩csv文件。 Vertica可以读取gzip,bzip和lzo压缩文件。

with open('file.csv.gz', 'r') as file:
    gzipped_csv_file = file.read()
    copy_cmd = "COPY Table FROM STDIN GZIP DELIMITER ','"
    cur.copy(copy_cmd, gzipped_csv_file)
    connection.commit()

复制压缩文件将减少网络时间。因此,您必须确定压缩csv文件所需的额外时间是否弥补了复制压缩文件所节省的时间。在大多数情况下,压缩文件是值得的。