pandas to_sql写入Azure SQL报42000错误Cannot find data type 'TEXT'求助
报错根因
错误根因:pandas执行to_sql方法时,默认会将DataFrame中object类型的字符串列映射为SQL的TEXT数据类型,但Azure SQL Database/ Azure Synapse 专用SQL池已废弃TEXT类型,无法识别该数据类型,因此触发报错。
解决方案
你只需要在调用to_sql时通过dtype参数手动指定字符串列的映射类型为Azure SQL支持的NVARCHAR/VARCHAR即可,修改后的参考代码如下:
# 先从sqlalchemy导入对应数据类型 from sqlalchemy.types import NVARCHAR, Integer, Float # 原有创建连接、生成DataFrame的代码保持不变,只修改最后一行to_sql的部分 df.to_sql( name='demo_table', con=engine, index=False, # 手动指定每一列的SQL数据类型 dtype={ 'Name': NVARCHAR(100), # 可根据实际字段长度调整,不确定长度可写NVARCHAR(MAX) 'Subject': NVARCHAR(200), 'Marks': Integer(), 'GPA': Float() } )
如果你的DataFrame字符串列较多,不想逐个指定,也可以统一处理所有object类型的列,自动映射为NVARCHAR(MAX):
from sqlalchemy.types import NVARCHAR # 自动生成dtype映射规则 dtype_mapping = {col: NVARCHAR(MAX) for col, dtype in df.dtypes.items() if dtype == 'object'} df.to_sql( name='demo_table', con=engine, index=False, dtype=dtype_mapping )
补充说明
- 如果对应表已经提前在库中创建,建议
dtype指定的类型和库中表的字段类型保持一致 - 如果需要覆盖/追加写入已有表,可以添加
if_exists='replace'或者if_exists='append'参数
内容的提问来源于stack exchange,提问作者bkghosh
相关产品推荐
相关产品推荐

