Ошибка неверного имени столбца при записи pandas DataFrame в sql

Когда я пытаюсь записать фрейм данных на сервер MS SQL, как это:

cnxn = sqlalchemy.create_engine("mssql+pyodbc://@HOST:PORT/DATABASE?driver=SQL+Server") 
df.to_sql('DATABASE.dbo.TABLENAME', cnxn, if_exists='append', index=False)

Я получаю следующую ошибку:

ProgrammingError: (pyodbc.ProgrammingError) ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'DateDay'. (207) (SQLExecDirectW)") [SQL: 'INSERT INTO [DATABASE.dbo.TABLENAME] ([DateDay], [ID], [Code], [Forecasted], [Lower95CI], [Upper95CI], [ForecastMethod], [ForecastDate]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'] [parameters: ((datetime.datetime(2017, 12, 10, 0, 0), '8496', "'IO'", 197, 138, 138, 'ARIMAX',...

кажется, что имя столбца вызывает ошибку? он ищет [DateDay], но находит 'DateDay' с ''? как это исправить?

Я использую Python 3.6 на машине с Windows, панды 0.22, sqlalchemy 1.1.13 и pyodbc 4.0.17

ОБНОВЛЕНИЕ - РЕШЕНИЕ НАЙДЕНО:

Поэтому я понял, что моя ошибка была в имени таблицы, которая вызывает базу данных: "DATABASE.dbo.TABLENAME", когда я удалил DATABASE.dbo, это сработало:

df.to_sql('TABLENAME', cnxn, if_exists='append', index=False)

1 ответ

Проблема также может возникнуть, если имя, которое вы определили в таблице базы данных, и имя, которое вы определили в фрейме данных для одного и того же столбца, отличаются. Например, "items" и "itens" не будут совпадать, и это вызовет ошибку, когда ваш скрипт попытается записать фрейм данных в базу данных.

Проблема заключалась в том, что я добавил имя базы данных при выполнении команды df.to_sql, которая не была нужна, так как я уже установил соединение с этой базой данных. Это сработало:

df.to_sql('TABLENAME', cnxn, if_exists='append', index=False)
Другие вопросы по тегам