使用 Python 将数据导入 SQL

Import Data to SQL using Python

我需要将 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()

您想使用 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 文件所花费的额外时间是否弥补了复制压缩文件所节省的时间。在我处理过的大多数情况下,压缩文件是值得的。