to_sql "Incorrect syntax" 将 DataFrame 插入 [schema] 时出错。[table]
to_sql "Incorrect syntax" error on inserting DataFrame to [schema].[table]
我创建了 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文件中的列名相同。
to_sql
期望第一个参数是 只是 table 名称作为普通(未引用)字符串。如果需要指定模式名称,则必须将其作为 schema=
参数传递,例如
df.to_sql(name='NEP-7', con=engine, schema='CProject.[Source]', ...
我创建了 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文件中的列名相同。
to_sql
期望第一个参数是 只是 table 名称作为普通(未引用)字符串。如果需要指定模式名称,则必须将其作为 schema=
参数传递,例如
df.to_sql(name='NEP-7', con=engine, schema='CProject.[Source]', ...