Python 更改为_SQL列映射

Python 更改为_SQL列映射,python,sql-server,pandas,sqlalchemy,Python,Sql Server,Pandas,Sqlalchemy,关于pd.to\u sql(),我有一个小问题。我的任务是将excel文件加载到MSSQL数据库中(导入向导不是选项)。过去我成功地使用了sqlalchemy和pandas,但似乎无法解决这个问题 from sqlalchemy import create_engine import pandas as pd # Parameters for SQL ServerName = "SERVER_NAME_HERE" Database = "MY_NAME_HERE" Driver = "driv

关于
pd.to\u sql()
,我有一个小问题。我的任务是将excel文件加载到MSSQL数据库中(导入向导不是选项)。过去我成功地使用了
sqlalchemy
pandas
,但似乎无法解决这个问题

from sqlalchemy import create_engine
import pandas as pd

# Parameters for SQL
ServerName = "SERVER_NAME_HERE"
Database = "MY_NAME_HERE"
Driver = "driver=SQL Server Native Client 11.0"

# Create the connection
engine = create_engine('mssql+pyodbc://' + ServerName + '/' + Database + "?" + Driver)

df1=read_excel('MY_PATH_HERE')
# do my manipulations below and make sure the dtypes are correct....

#... end my manipulations
df2.to_sql('Auvi-Q_Evzio_Log', engine, if_exists='append', index=False)

ERROR:
pyodbc.ProgrammingError: ('42S22', "[42S22] [Microsoft][SQL Server Native
Client 11.0][SQL Server]Invalid column name 'Created On'. (207) 
(SQLExecDirectW)")
我的问题是数据库的架构已经设置好,无法更改。我在上创建的数据框
中有一列,但数据库中的列名是
CreatedOn
。我有几个专栏讨论这个问题。有没有办法在中正确设置映射或模式?文档中有一个
schema
参数,但我找不到有效的示例


我可以只更改数据帧的列名以匹配scehma,但我的兴趣被忽略了。

我会尝试以下方法:

db_tab_cols = pd.read_sql("select * from [Auvi-Q_Evzio_Log] where 1=2", engine) \
                .columns.tolist()

df2.columns = db_tab_cols
df2.to_sql('Auvi-Q_Evzio_Log', engine, if_exists='append', index=False)

PS此解决方案假设当我运行
db\u tab\u cols
I get
sqlalchemy.exc.ProgrammingError:(pyodbc.ProgrammingError)('42000',“[42000][Microsoft][SQL Server原生客户端11.0][SQL Server]“-”附近的语法不正确。
它在
Auvi-Q
中的
-
上失败。特殊字符
\`
也无法修复。但是如果我只加载整个表
db\u tab\u cols=pd.read\u sql(“Auvi-Q\u Evzio\u Log”,engine)。columns.tolist()
有效?给出了什么?第二,它们的长度不同
值错误:长度不匹配:预期轴有41个元素,新值有45个元素
。有什么想法吗?@MattR,SQL Server DB中的实际表名是什么?Auvi-Q_Evzio_Log。或者更准确地说[dbo]。[Auvi-Q_Evzio_Log].EDIT:使用全名是可行的……但长度显然不匹配:)@MattR,您必须确保
df2
的列数与
[Auvi-Q_Evzio_Log]
表的列数相同-显然……)