我对pd.to_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)")
我的问题是数据库的架构已经设置好,无法更改。我的数据框Created On
中有一列,但数据库中的列名为CreatedOn
。我有一些专栏出现这个问题。有没有办法在to_sql
中正确设置映射或架构?文档中有一个schema
参数,但我找不到有效的示例。
我可以更改数据框的列名以匹配scehma,但我的兴趣却被偷看了。
答案 0 :(得分:0)
我尝试以下方法:
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此解决方案假定df2
与Auvi-Q_Evzio_Log
表具有相同的列顺序