Я создал соединение SQLAlchemy, которое отлично работает:
import urllib
import sqlalchemy as sqlalchemy
import pandas as pd
params = urllib.parse.quote_plus("DRIVER={SQL Server};"
"SERVER="
'Database=CProject;'
'Trusted_Connection=yes;')
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
, но когда я использую приведенный ниже код для вставки данных в фрейм данных, выдается ошибка.
df = pd.read_excel('june.xlsx')
df.to_sql(name = 'CProject.[Source].[NEP-7]',if_exists='append',con = engine, index=False)
Ошибка:
ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000]
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'VARCHAR'. (102) (SQLExecDirectW)")
[SQL:
CREATE TABLE [CSOProjects.[Source].[NEC-7-11]] (
number VARCHAR(max) NULL,
assigned_to VARCHAR(max) NULL,
[caller_id#user_name] VARCHAR(max) NULL,
state VARCHAR(max) NULL,
assignment_group VARCHAR(max) NULL,
business_duration BIGINT NULL,
business_service VARCHAR(max) NULL,
category VARCHAR(max) NULL,
u_category_structure VARCHAR(max) NULL,
u_resolution_ci VARCHAR(max) NULL,
resolved_by VARCHAR(max) NULL,
u_resolver_group VARCHAR(max) NULL,
u_service_provider VARCHAR(max) NULL,
sys_created_on DATETIME NULL,
caller_id VARCHAR(max) NULL,
u_caller_first_name VARCHAR(max) NULL,
u_caller_last_name VARCHAR(max) NULL,
u_vendor_category VARCHAR(max) NULL,
rfc FLOAT(53) NULL,
closed_at DATETIME NULL,
closed_by VARCHAR(max) NULL,
contact_type VARCHAR(max) NULL,
sys_created_by VARCHAR(max) NULL,
u_customer_portal_state VARCHAR(max) NULL,
description VARCHAR(max) NULL,
u_first_call_resolution VARCHAR(max) NULL,
u_first_time_fix BIT NULL,
impact VARCHAR(max) NULL,
u_incident_age VARCHAR(max) NULL,
knowledge BIT NULL,
reopened_by VARCHAR(max) NULL,
location VARCHAR(max) NULL,
u_on_behalf_of VARCHAR(max) NULL,
opened_at DATETIME NULL,
opened_by VARCHAR(max) NULL,
priority VARCHAR(max) NULL,
reassignment_count BIGINT NULL,
u_resolution_method VARCHAR(max) NULL,
close_code VARCHAR(max) NULL,
close_notes VARCHAR(max) NULL,
calendar_stc FLOAT(53) NULL,
resolved_at DATETIME NULL,
u_sd_esclation VARCHAR(max) NULL,
sla_due FLOAT(53) NULL,
severity VARCHAR(max) NULL,
short_description VARCHAR(max) NULL,
reopen_count BIGINT NULL,
subcategory VARCHAR(max) NULL,
sys_updated_by VARCHAR(max) NULL,
urgency VARCHAR(max) NULL,
sys_updated_on DATETIME NULL,
[assigned_to#active] BIT NULL
)
]
(Справочная информация об этой ошибке: http://sqlalche.me/e/f405)
Примечание. Имена столбцов в базе данных и файле Excel совпадают.