Я пытаюсь загрузить файл размером ~ 900 МБ в базу данных 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
kwarg в методе to_csv
?
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Некоторые из полей адреса имели ,
в них, так чтобыло двойное цитирование этих полей.Я изменил sep=','
на sep='|'
в обоих местах, и он прекратил двойные кавычки в адресных полях, в которых было ,
.Тем не менее, проблема все еще сохраняется.
РЕДАКТИРОВАТЬ 2: я получил его работать,
cur.copy_expert("""COPY sam_monthly_extract_temp FROM STDIN WITH (FORMAT CSV, DELIMITER '|')""", sio)