('42000', '[42000] [Microsoft][Собственный клиент SQL Server 11.0][SQL Server] Ошибка преобразования типа данных varchar в bigint
Я видел, что в прошлом тоже были подобные вопросы, но, к сожалению, я не смог найти там решения. Я относительно новичок в Python.
У меня есть pandas dataframe, который я хочу записать в SQL Server с помощью SQLalchemy dataframe.to_sql()
Фрейм данных имеет точно такое же количество столбцов, а имена столбцов такие же, как в таблице sql. Я не могу точно указать причину этой ошибки. Кроме того, я отмечаю, что по умолчанию это также экспорт индекса данных. Итак, нужен ли нам дополнительный столбец в таблице sql, соответствующий индексу. Я тоже это пробовал, но все равно выдает ту же ошибку.
Это код, который я запускаю:
import sqlalchemy
import pyodbc
engine = create_engine('mssql+pyodbc://workspace?driver=SQL+Server+Native+Client+11.0', echo=True)
campaign_table.to_sql("workspace.dbo.campaign_results", con= engine,if_exists = 'append')
ОШИБКА, которую я ПОЛУЧИЛ:
ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Error converting data type varchar to bigint. (8114) (SQLExecDirectW)') [SQL: u'INSERT INTO [workspace.dbo.campaign_results] ([index], [Emailing_id], delivered, clickcount, [impressionCount], [errorCount], abusecount, unsubscribecount, [unknownCount], ctr, cto, destinationcount, firsttimestamp, lasttimestamp, unique_clicks, unique_impressions, [Open_Rate], campaign_id, template_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'] [parameters: ('Emailing_id', '27619', '10606', '241', '3658', '243', '0', '0', '7797', '2', '8', '10845', u'2017-02-03 06:30:15', u'2017-02-03 06:30:15', '216', '2589', '23', '1', '1')]
Вопросы
- Это ошибка при преобразовании типов данных или какая-то проблема соединения между Python и SQLServer?
- Как я могу узнать, какая переменная является источником этой проблемы? Метод проб и ошибок - один из способов, но что, если у меня слишком много переменных в кадре данных?
Пожалуйста, направьте меня или направьте меня к соответствующим темам, поскольку я все еще нахожусь в лабиринте.
Ура!
ОБНОВИТЬ
После изменения формата нескольких переменных Python, кажется, работает нормально, но таблица SQL все еще не обновляется. В Stackru была точно такая же проблема, но указанное там решение (добавление одной строки вручную в таблицу SQL) также не помогло. Вот новый вывод:
campaign_table_f.to_sql ("workspace.dbo.campaign_results", con = engine, if_exists = 'append')
2017-02-15 09: 46: 51,773 ИНФОРМАЦИЯ sqlalchemy.engine.base.Engine SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_], [COLUMNS__1]., [COLUMNS_1].[DATA_TYPE], [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUM]. COLUMNS. COLUMNSS COLUMNS_1]. [COLLATION_NAME] ИЗ [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1], ГДЕ [COLUMNS_1].[TABLE_NAME] = CAST(? AS NVARCHAR(макс.)) И [COLUMNS_1]? КАРАБА (НОСИНА)? (max)) 15.02.2017 09:46:51,776 ИНФОРМАЦИЯ sqlalchemy.engine.base.Engine (u'workspace.dbo.campaign_results', u'ashish.dang') 2017-02-15 09:46:51,877 ИНФОРМАЦИЯ sqlalchemy.engine.base.Engine BEGIN (неявный) 2017-02-15 09:46:51,881 INFO sqlalchemy.engine.base.Engine INSERT INTO [workspace.dbo.campaign_results] ([index], [Emailing_id], доставлено, количество кликов), [impressionCount], [errorCount], злоупотребление счетом, отписаться счет, [unknownCount], ctr, cto, destinationco Unt, firsttimestamp, lasttimestamp, unique_clicks, unique_impressions, [Open_Rate], campaign_id, template_id) ЗНАЧЕНИЯ (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 2017-02-15 09:46:51,882 INFO sqlalchemy.engine.base.Engine ((0L, '27610', '381', '41', '473', '5', '0', '0', '201', '9', '19', '386', u'2017-02-03 06:15:17', u'2017-02-03 06:15:17', '34', '146', '37', 1L, 0L), (1L, '27612', '153', '12', '251', '2', '0', '0', '58', '6', '9', '155', u'2017-02-03 06:15:18', u'2017-02-03 06:15:18', '9', '86', '55', 1L, 1L)) 2017-02-15 09:46:51,977 ИНФОРМАЦИЯ sqlalchemy.engine.base.Engine COMMIT