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

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

解决pyodbc插入SQL Server uniqueidentifier类型列报错的问题

这个问题我之前帮不少开发者排查过,你遇到的Conversion failed when converting from a character string to uniqueidentifier错误,核心原因是pyodbc不会自动将普通字符串映射为SQL Server的uniqueidentifier类型——哪怕你的UUID字符串格式完全正确,它也会被当作普通文本传递给数据库,导致隐式转换失败。

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

方法一:使用Python的uuid模块传递UUID对象

pyodbc能直接识别Python的uuid.UUID实例,并正确映射到SQL Server的uniqueidentifier类型。代码示例如下:

import uuid
import pyodbc

# 替换为你的数据库连接字符串
conn_str = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=your_server;DATABASE=your_db;UID=your_user;PWD=your_pwd"
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

# 将UUID字符串转换为UUID对象
uid_col1 = uuid.UUID('67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE')
uid_col2 = uuid.UUID('2E92D02D-B7DA-4DED-9816-26B2CF867FA2')

# 执行插入操作
cursor.execute("""INSERT INTO tablename (col1, col2) VALUES (?, ?)""", uid_col1, uid_col2)
conn.commit()

# 关闭连接
cursor.close()
conn.close()

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

如果你不想引入uuid模块,可以在INSERT语句里用CAST或CONVERT函数,强制将字符串转换为uniqueidentifier类型:

import pyodbc

conn_str = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=your_server;DATABASE=your_db;UID=your_user;PWD=your_pwd"
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

# 用CAST显式转换字符串为uniqueidentifier
cursor.execute("""
    INSERT INTO tablename (col1, col2) 
    VALUES (CAST(? AS UNIQUEIDENTIFIER), CAST(? AS UNIQUEIDENTIFIER))
""", 
'67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE', 
'2E92D02D-B7DA-4DED-9816-26B2CF867FA2')

conn.commit()
cursor.close()
conn.close()

额外注意事项

  • 确保你的UUID字符串是标准格式:36个字符,包含4个连字符(例如xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),大小写不影响转换。
  • 如果还是报错,先检查字符串是否有拼写错误(比如少了连字符、字符数不对),这也是触发转换失败的常见原因。

内容的提问来源于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 08:02:02