无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段
Posted
技术标签:
【中文标题】无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段【英文标题】:Cannot insert/update Long Text field in a table in an Access database using pyodbc 【发布时间】:2018-02-08 17:37:27 【问题描述】:我一直在使用 pyodbc 连接本地 Access 数据库(.accdb 文件),但如果我尝试输入的字符串超过 255 个字符,则无法更新长文本字段。字段(Description)的数据类型是Long Text,Text Format是Rich Text。
代码:
import pyodbc
pyodbc.pooling = False
conn_str = (
r'DRIVER=Microsoft Access Driver (*.mdb, *.accdb);'
r'DBQ=C:\...\...\...\...\database.accdb;'
)
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()
temp_desc = complex_descricao(comp_idx, "T_Compound", crsr, cnxn) #Function produces large string (> 255 characters)
#temp_desc = temp_desc[:255] # Filter I have used to test the maximum number of characters allowed
crsr.execute("UPDATE T_Compound SET Description = ? WHERE ID_Comp = ?", temp_desc, comp_idx)
cnxn.commit()
这会产生以下错误:
错误: ('HY104', '[HY104] [Microsoft][ODBC Microsoft Access Driver]无效的精度值 (98) (SQLBindParameter)')
我尝试直接在数据库中更改字段属性。我也尝试直接在 Acces 中插入超过 255 个字符的字符串,并且能够这样做。
我一直在寻找解决问题的方法,我认为这与绑定参数有关,尽管我对此主题了解不多。我在这里留下一个链接,我相信它可能与问题有关:https://github.com/mkleehammer/pyodbc/wiki/Binding-Parameters
如有任何帮助可以使用大字符串更新字段,我们将不胜感激。
【问题讨论】:
听起来您使用的是 pyodbc 4.0.22,它有几个已知问题。尝试降级到 pyodbc 4.0.21 看看是否有帮助。 (它对我有用。) 它也对我有用,非常感谢! 【参考方案1】:您在 pyodbc 4.0.22 中遇到了回归问题。它正在调查中(多个 GitHub 问题 here),应该在 pyodbc 的未来版本中修复。同时,只需恢复到 pyodbc 4.0.21:
pip install pyodbc==4.0.21
【讨论】:
更新:升级到 pyodbc 4.0.23 也应该有所帮助。以上是关于无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段的主要内容,如果未能解决你的问题,请参考以下文章
在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误
使用 Pyodbc 在 MS Access 表中写入新行的问题