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

使用Pandas read_sql_query()指定UNIQUEIDENTIFIER dtype触发TypeError

问题原因

Pandas的read_sql_query()方法的dtype参数只接受NumPy数据类型(如np.object_)或Pandas自身的扩展类型(如pd.StringDtype()),你传入的UNIQUEIDENTIFIER是SQLAlchemy针对SQL Server定义的方言数据类型,不属于Pandas能识别的 dtype 范畴,所以触发了类型错误。

解决方案

方案1:依赖驱动自动映射(推荐)

pyodbc驱动会自动把SQL Server的UNIQUEIDENTIFIER类型映射为Python的uuid.UUID对象,Pandas会将这类列识别为object dtype,直接使用即可:

df_ifg_appt = pd.read_sql_query(
    '''
    select
        p.id,
        p.name,
        p.start_date,
        p.end_date
    from core.person p
    ''',
    con=connection
)
# 如需将UUID转为字符串格式,可后续处理:
df_ifg_appt['id_str'] = df_ifg_appt['id'].astype(str)

方案2:显式指定Pandas支持的dtype

根据存储需求选择对应的Pandas兼容类型:

  • 若要保留UUID对象,指定dtype={'id': object}
  • 若要直接存储字符串格式的UUID,指定dtype={'id': pd.StringDtype()}

示例代码:

df_ifg_appt = pd.read_sql_query(
    '''
    select
        p.id,
        p.name,
        p.start_date,
        p.end_date
    from core.person p
    ''',
    con=connection,
    dtype={
        'id': pd.StringDtype()
    }
)

方案3:查询时直接转换为字符串

在SQL语句中把UNIQUEIDENTIFIER转为字符串,Pandas会自动识别为字符串列,无需额外指定dtype:

select
    CAST(p.id AS VARCHAR(36)) AS id,
    p.name,
    p.start_date,
    p.end_date
from core.person p

内容的提问来源于stack exchange,提问作者philipnye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:35:00