我尝试了许多方法将数据从数据框插入数据库,但没有一种方法能够快速完成,耗时长达两天至三天,并最终出现超时错误。以下是我尝试过的几种方法:
首先,我将数据框转换为字典并尝试上传到数据库。以下是一个示例数据的样子(请注意,我分享的是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, ...}] # 这里省略了更多字典项
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))
conn.commit()
这两种方法都需要耗费很长的时间。
针对您拥有的大约60万条记录的大数据量,请问是否可以有人推荐更高效的数据插入方法?