使用pyodbc无法更新Access数据库中超过255字符的长文本字段
解决pyodbc更新Access Long Text(Rich Text)字段时的255字符限制问题
我之前也碰到过一模一样的问题!当用pyodbc往Access的Rich Text格式Long Text字段插入/更新超过255字符的内容时,确实会触发HY104这个精度错误——本质是pyodbc默认给字符串参数设置的长度上限是255,和Long Text字段的需求不匹配。
下面是几个亲测有效的解决方法:
方法1:显式指定参数的SQL类型为TEXT
在绑定参数的时候,不要让pyodbc自动推断类型,手动指定SQL_LONGVARCHAR(或SQL_WLONGVARCHAR针对Unicode内容),强制适配Long Text字段的长度要求。示例代码如下:
import pyodbc from pyodbc import SQL_LONGVARCHAR # 建立数据库连接 conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\database.accdb;') cursor = conn.cursor() # 超过255字符的富文本内容 long_rich_text = "<div>这里是包含HTML格式的长文本内容,长度远超255字符...(省略大量内容)</div>" # 显式指定参数类型为SQL_LONGVARCHAR cursor.execute("UPDATE YourTable SET Description = ? WHERE ID = ?", (long_rich_text, 1)) # 提交更改并关闭连接 conn.commit() cursor.close() conn.close()
方法2:设置参数长度为0适配字段上限
另一个实用技巧是在定义参数时将长度设为0,让pyodbc自动识别目标字段的最大长度,而非默认的255。示例:
import pyodbc conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\database.accdb;') cursor = conn.cursor() long_text = "这里是超过255字符的普通长文本内容...(省略大量内容)" # 用Param对象设置长度为0 custom_param = pyodbc.Param(pyodbc.SQL_VARCHAR, value=long_text, length=0) cursor.execute("UPDATE YourTable SET Description = ? WHERE ID = ?", (custom_param, 1)) conn.commit() cursor.close() conn.close()
额外注意事项
- 再次确认你的Access字段确实是Long Text类型,且格式设置为Rich Text(虽然你已经调整过,但二次验证能排除配置遗漏);
- 如果内容包含HTML标签(Rich Text本质是带HTML格式的文本),无需转义标签,直接传入即可,Access会正确解析显示;
- 务必使用参数化查询,避免直接拼接SQL字符串——不仅会触发精度问题,还存在SQL注入风险。
内容的提问来源于stack exchange,提问作者user3187129
相关产品推荐
相关产品推荐

