当存在数字符号(#)时,MS Access SELECT语句出错

时间:2017-04-03 19:12:20

标签: python ms-access odbc pypyodbc

运行此最小代码时:

import pypyodbc

conn = pypyodbc.connect(r'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}}; Dbq=C:\temp\example.accdb;'
cur = conn.cursor()

cur.execute('SELECT [Pass#] FROM [Companies]')

我收到以下错误:

pypyodbc.DatabaseError: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.')

错误原因似乎是'#'字符,它是MS Access的特殊通配符。但是,我无法想办法逃脱它。类似的错误表明方括号([])是逃避的方式,但它似乎不起作用。

我尝试过这些变体并没有成功:

cur.execute('SELECT [Pass[#]] FROM [Companies]')

cur.execute('SELECT Pass[#] FROM [Companies]')

cur.execute('SELECT [Pass\\#] FROM [Companies]')

cur.execute('SELECT Pass# FROM [Companies]')

我还应该提到Access数据库不受我或我公司控制,因此我无法重命名该列。

1 个答案:

答案 0 :(得分:1)

感谢Gord Thompson指出我正确的方向。简而言之,我正在使用的架构已经过时了,字段[Pass#]已重命名为[PassID]

然而事实证明,我的数据库中的其他字段的行为仍然令人困惑。对于将来找到此答案的任何人来说,如果您的列名错误,而不是更有用的Too few parameters. Expected N.或类似名称,则以这种方式调用的Access ODBC驱动程序似乎会出现错误Column name not recognized。列名称中允许使用#个字符,只要名称是方括号。