You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 04:45:03