我正在尝试使用PostgreSQL数据库向RDS实例写入15 Mb的数据,但是我发现这非常慢......将所有数据完全写入实例需要大约15分钟。任何人都经历过将大量数据逐行写入RDS实例的经历?谢谢!
# Assuming the table is already created
def handler(file_with_many_many_rows, con):
cur = con.cursor()
reader = csv.reader(f)
for i, line in enumerate(reader):
vals = ("val1", "val2", "val3")
insert_query = "INSERT INTO table_test VALUES (%s, %s, %s);"
cur.execute(insert_query, vals)
con.commit()
答案 0 :(得分:0)
我几乎可以确定您尝试执行的查询数量存在问题。通过分析方法的复杂性,我可以假设它是 O(n)因为你有15 * 10 ^ 6行,执行时间大约是15分钟。
将所有数据量拆分为块,并为每个事务插入多个数据实例。您可以使用1000行开始实验,也可以根据数据大小创建限制,例如:计算从csv文件导出到postgres db的每行的行大小。
如果您直接使用psycopg2
,请尝试executemany
游标方法一次插入多行。以下是要插入的块的example of how to use executemany without spliting。
你也可以使用pandas做同样的事情,这对于管理时间序列数据非常有用,但你可以按照这个asnwer importing-a-csv-file-into-a-sqlite3-database-table-using-python中描述的方式使用它pandas.read_csv
和{{ 3}}