LINUX.ORG.RU

pandas to_sql делать записи порциями

 ,


2

2

Помогите решить проблему записи большого датафрейма в postgres таблицу. Есть датафрейм df, который с небольшим количеством данных (несколько сот записей тестирвовал) успешно и быстро сохраняется в postgres таблицу:

df.to_sql(
    'my_table', my_engine, chunksize=100, if_exists='replace')
Но, в требуемом режиме (продовском), когда число записей достигает приблизительно 500 тыс. строк ничего не происходит. Оператор висит несколько часов и молча завершается без всяких сообщений. Данные при это не попадают в postgres - нет ни одной записи. Табличка создается, если ее удалить предварительно. При этом датафрейм имеется и его строки успешно печатаются в консоли ...

Что можно сделать? Почему нет ни одной записи, хотяюбы первые 100 штук?

Можешь перед этим попробовать method='multi', т.к. сейчас у тебя по одному insert-у каждая строка вставляется. Но batch из csv лучше.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)

По строкам ты не видишь возможно потому, что это делается одной транзакцией.

vromanov ★★
()

Попробуй писать пачками через COPY.

theNamelessOne ★★★★★
()
Ответ на: комментарий от Shadow

Всем, спасибо большое! Через csv и затем копирование из файла отрабатывает быстро и без сбоев.

df.to_csv('my_table.csv')
cur.copy_from(open('my_table.csv'), 'my_table', ...)
scisearcher
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.