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

如何使用pyodbc向SQL Server的uniqueidentifier列插入数据

解决pyodbc插入uniqueidentifier列时的转换错误

这个问题我之前在项目里也踩过坑!你遇到的Conversion failed when converting from a character string to uniqueidentifier错误,本质是pyodbc默认把传入的字符串参数当成普通的VARCHAR类型处理,而SQL Server没法自动完成这个隐式转换——哪怕你的字符串格式完全符合GUID规范。

下面给你两种最靠谱的解决方法:

方法1:在SQL语句中显式转换类型

直接在VALUES子句里用CAST或者CONVERT把参数转成UNIQUEIDENTIFIER类型,这样SQL Server就明确知道该怎么处理这个值了:

cursor.execute("""
    INSERT INTO tablename (col1, col2)
    VALUES (CAST(? AS UNIQUEIDENTIFIER), CAST(? AS UNIQUEIDENTIFIER))
""", '67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE', '2E92D02D-B7DA-4DED-9816-26B2CF867FA2')

这种方法的好处是不需要额外导入模块,代码改动最小,适合快速解决问题。

方法2:用pyodbc的SQLGUID类型包装参数

如果你想让驱动本身识别参数类型,可以用pyodbc提供的SQLGUID类来包装GUID值。需要先把字符串转成Python的uuid.UUID对象,再传给SQLGUID:

from pyodbc import SQLGUID
import uuid

# 转换字符串为UUID对象,再用SQLGUID包装
guid_col1 = SQLGUID(uuid.UUID('67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE'))
guid_col2 = SQLGUID(uuid.UUID('2E92D02D-B7DA-4DED-9816-26B2CF867FA2'))

cursor.execute("""
    INSERT INTO tablename (col1, col2)
    VALUES (?, ?)
""", guid_col1, guid_col2)

这种方法更规范,适合在频繁处理GUID的项目中使用,能避免后续类似的类型转换问题。

另外小提醒:确保你的GUID字符串格式是完全正确的(比如大小写不影响,但分隔符-不能少,长度要对),不过从你给出的示例来看,格式是没问题的,主要还是类型传递的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:55:42