Ошибка при использовании to_sql(… , метод=’несколько’) с MS Access

#python #pandas #ms-access #sqlalchemy #sqlalchemy-access

Вопрос:

Я вставляю данные в базу данных Microsoft Access, используя следующий код:

 test_data.to_sql('employee_table', cnxn, index=False, if_exists='append', chunksize=10, method='multi')
 

Это приводит к ошибке:

 AttributeError: 'CompileError' object has no attribute 'orig'
 

Нет никакой ошибки, если просто использовать следующее, т. е. нет method опции:

 test_data.to_sql('employee_table', cnxn, index=False, if_exists='append', chunksize=10)
 

Комментарии:

1. Тогда почему бы не использовать код, который не выдает ошибок? Фиксирует ли он данные? В чем здесь проблема? Зачем вам нужен дополнительный параметр?

Ответ №1:

Приведенное вами сообщение об ошибке является последующим исключением, вызванным исходной ошибкой (ранее в трассировке стека).:

ошибка sqlalchemy.exc.CompileError: Диалект «доступ» с текущими настройками версии базы данных не поддерживает многорядные вставки на месте.

method="multi" Опция .to_sql() хочет создавать многорядные операторы ВСТАВКИ, часто в форме «конструктора табличных значений», например,

 INSERT INTO table1 (col1, col2) VALUES (1, 'foo'), (2, 'bar')
 

и Access SQL не поддерживает их.

Если простой .to_sql() (без method= ) слишком медленный для большого кадра данных, рассмотрите альтернативный подход, описанный в вики:

https://github.com/gordthompson/sqlalchemy-access/wiki/[pandas]-faster-alternative-to-.to_sql()-for-large-uploads