我尝试了许多方法将数据从数据框插入数据库,但没有一种方法能够快速完成。在尝试插入数据时,我遇到了耗时两天或三天后出现超时错误的情况。
以下是我尝试过的几种方法:
第一种方法是将数据框转换为字典并尝试上传到数据库。以下是一个样本数据示例(请注意,我只展示了20行数据,但实际上我有大量的数据):
conn = psycopg2.connect(
host= 'redshift-####-dev.)00000.us-east-1.redshift.amazonaws.com',
database= '*****',
user='****',
password='*****',
port= '5439'
)
print("成功连接到RedShift Dev")
cur = conn.cursor ()
df_dic =[{'case_id': 69370, 'column_name': 'subject', 'split_text': 'working', 'split_text_cnt': 1, 'load_ts': '2023-12-15'},
{'case_id': 69370, 'column_name': 'subject', 'split_text': 'scenes', 'split_text_cnt': 1, 'load_ts': '2023-12-15'}, ...]
sql = "INSERT INTO odey.sfc_ca_sit_di (case_id,column_name,split_text,split_text_cnt,load_ts) VALUES (%(case_id)s,%(column_name)s,%(split_text)s,%(split_text_cnt)s,%(load_ts)s)"
cur.executemany(sql, df_dic)
conn.commit()
第二种方法是将数据框转换为元组,并执行查询语句,其中final_out
是数据框:
sql = "INSERT INTO sey.sfdse_sp_di (case_id,column_name,split_text,split_text_cnt,load_ts) VALUES (%s,%s,%s,%s,%s)"
for row in final_out.values.tolist():
cur.execute(sql, tuple(row))
#print(tuple(row))
conn.commit()
这两种方法都需要数天的时间来完成插入操作。
请问是否有人可以提供一种能更快地插入大量数据(大约60万条记录)的方法?