#flask #sqlalchemy #flask-sqlalchemy #psycopg2 #flask-marshmallow
Вопрос:
Я пытаюсь загрузить фрейм данных на сервер Heroku PostgreSQL, что я успешно делал несколько раз раньше.
вот мой код, где for_db
имя моего фрейма данных Pandas:
from sqlalchemy import create_engine
engine = create_engine('postgresql://wgam{rest of url}',
echo=False)
# attach the data frame to the sql server
for_db.to_sql('phil_nlp',
con = engine,
if_exists='replace')
Сначала он не смог подключиться, потому что URL-адрес сервера, который дал мне Heroku, в начале содержал только ‘postgres’, но я понимаю, что его нужно изменить на ‘postgresql’, чтобы работать должным образом и преодолеть эту первоначальную ошибку.
Теперь я получаю новую ошибку.
/usr/local/lib/python3.7/dist-packages/sqlalchemy/dialects/postgresql/psycopg2.py in do_executemany(self, cursor, statement, parameters, context)
899 template=executemany_values,
900 fetch=bool(context.compiled.returning),
--> 901 **kwargs
902 )
903
TypeError: execute_values() got an unexpected keyword argument 'fetch'
Я не понимаю, почему это может возникнуть. Очевидно, я никогда не указывал такой аргумент ключевого слова. Я провел много поисков без каких-либо хороших результатов. Кто-нибудь знает, почему теперь он выдает эту ошибку в коде, который работал только на прошлой неделе?
Ответ №1:
Я столкнулся с той же проблемой при запуске DataFrame.to_sql
метода. Добавление method='multi'
действительно заставляет его работать и является хорошим обходным путем.
Изучив его немного дальше, оказалось, что это проблема с версиями sqlalchemy и psycopg2, которые я установил. Эти проблемы с github здесь и здесь привели меня к следующему.
fetch
Параметр был добавлен в psycopg2 версии 2.8. У меня была версия 2.7 и sqlalchemy 1.4.15
Установка более новой версии устранила проблему без необходимости добавления method='multi'
параметра.
pip install psycopg2-binary==2.8.6
Надеюсь, это поможет кому-нибудь еще найти эту проблему
Комментарии:
1. Спасибо, это помогло мне решить проблему
2. Сработало и в моем случае! Престижность
Ответ №2:
Удалось исправить это, добавив ‘multi’ в качестве параметра метода:
for_db.to_sql('phil_nlp',
con = engine,
if_exists='replace',
index=False,
method='multi')
Все еще не уверен, что вызвало ошибку, но я думаю, что проблема решена 🙂
Комментарии:
1. Хотя это работает в вашем конкретном случае, ответ @jtmolon дает общее решение (с хорошим объяснением), возможно, вам следует принять его ответ.
Ответ №3:
сработало для меня: pip install psycopg2-binary == 2.8.6