如何使用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
相关产品推荐
相关产品推荐

