我正在使用pyodbc与传统的Access 2000 .mdb文件进行通信。
我有一个光标,我正在尝试执行此操作:
c.execute("INSERT INTO [Accounts] ([Name], [TypeID], [StatusID], [AccountCat], [id]) VALUES (?, ?, ?, ?, ?)", [u'test', 20, 10, 4, 2])
然而,这样做会导致
pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented (106) (SQLBindParameter)')
我知道我可以简单地将问号更改为文字值,但根据我的经验,在数据库中正确转义字符串是......不太漂亮。
PHP和mysql合作带来mysql_real_escape_string
和朋友,但我似乎无法找到pyodbc的函数来转义值。
如果你能让我知道插入这些数据的推荐方法是什么(来自python),那将非常有帮助。或者,如果你有一个python函数来转义odbc字符串,那也很棒。
答案 0 :(得分:1)
嗯,显然这只是Access再次对我大喊大叫。
以前,我一直在插入python整数。现在,我试图插入python longs。
当插入long作为参数时,我得到
pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented (106) (SQLBindParameter)')
在调用执行程序之前将此代码添加到我的函数中修复它:
for k, v in new.items(): new[k] = int(v) if isinstance(v, long) else v
IOW,用int替换longs工作正常。 Go Access,这是一个描述性的错误。
严格来说,我不认为这是pyodbc中的错误,而是处理这个特定驱动程序时的问题。无论如何,谢谢你的帮助。