Источник ошибки ‘неожиданного ключевого аргумента ‘выборки’ ‘ в pandas to_sql?

#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