我正在尝试将一个~900 MB的文件加载到Postgres数据库,但是copy_from
方法导致了一些问题(df.to_sql
方法花了8个多小时将这些数据加载到AWS) 。
例如,这里有一些将数据帧转换为stringio
sio = StringIO()
sio.write(raw_data.to_csv(index=False, header=None, quoting=csv.QUOTE_NONNUMERIC, sep=','))
sio.seek(0)
with conn.cursor() as cur:
# cur.copy_expert("""COPY sam_monthly_extract_temp FROM STDIN WITH (FORMAT CSV)""", sio)
cur.copy_from(sio, 'sam_monthly_extract_temp', sep=',', columns=load_column_names)
conn.commit()
这引发了错误:
Traceback (most recent call last):
File "sam_monthly_extract.py", line 312, in <module>
cur.copy_from(sio, 'sam_monthly_extract_temp', sep=',', columns=load_column_names)
TypeError: Expected bytes or unicode string, got quoted_name instead
我对导致这种情况的原因感到茫然?是否与quoting
方法中的to_csv
kwarg有关?
感谢任何帮助。
编辑:其中一些地址字段中包含,
,因此它引用了这些字段。我在两个地方都将sep=','
更改为sep='|'
,并停止双重引用其中包含,
的地址字段。但问题仍然存在。
编辑2:我使用了它,
cur.copy_expert("""COPY sam_monthly_extract_temp FROM STDIN WITH (FORMAT CSV, DELIMITER '|')""", sio)