将Pandas DataFrame写入MS SQL Server时的无效列名错误及解决方法
解决Pandas写入MS SQL Server时的列名匹配错误问题
根据你描述的场景——Windows系统、Python 3.6、Pandas 0.22、SQLAlchemy 1.1.13及pyodbc 4.0.17环境下,将DataFrame写入MS SQL Server时出现“系统期望匹配[DateDay],但识别到带单引号的'DateDay'”的错误,这个问题的根源其实不在列名本身,而是表名的写法导致的。
问题原因
当你使用包含数据库和架构前缀的表名(比如'DATABASE.dbo.TABLENAME')时,SQLAlchemy或pyodbc在解析表名的过程中,引号处理逻辑出现了异常,间接干扰了列名的识别匹配流程,进而抛出了相关错误提示。
解决方案
移除表名中的DATABASE.dbo前缀,直接使用纯表名即可正常写入数据。
举个代码示例:
原来的报错写法:
df.to_sql('DATABASE.dbo.TABLENAME', con=engine, if_exists='append', index=False)
修改后的正确写法:
df.to_sql('TABLENAME', con=engine, if_exists='append', index=False)
需要注意的是,你的SQLAlchemy连接字符串需要已经指定了目标数据库,这样直接写表名就能正确定位到DATABASE.dbo.TABLENAME这个表。
内容的提问来源于stack exchange,提问作者Ahmed R. Abdulaal
相关产品推荐
相关产品推荐

