当出现数字符号 (#) 时,MS Access SELECT 语句出错
Error in MS Access SELECT statement when number symbol (#) present
当运行这个最小代码时:
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 DB 不受我或我公司的控制,所以我无法重命名该列。
感谢 Gord Thompson 为我指明了正确的方向。长话短说,我使用的模式很旧,字段 [Pass#]
已重命名为 [PassID]
.
然而事实证明,对于我的数据库中的其他字段,该行为仍然令人困惑。对于将来找到此答案的任何人来说,以这种方式调用的 Access ODBC 驱动程序似乎会在列名错误时给出错误 Too few parameters. Expected N.
,而不是更有帮助的 Column name not recognized
或类似的。 #
列名称中允许使用字符,只要名称用方括号括起来即可。
当运行这个最小代码时:
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 DB 不受我或我公司的控制,所以我无法重命名该列。
感谢 Gord Thompson 为我指明了正确的方向。长话短说,我使用的模式很旧,字段 [Pass#]
已重命名为 [PassID]
.
然而事实证明,对于我的数据库中的其他字段,该行为仍然令人困惑。对于将来找到此答案的任何人来说,以这种方式调用的 Access ODBC 驱动程序似乎会在列名错误时给出错误 Too few parameters. Expected N.
,而不是更有帮助的 Column name not recognized
或类似的。 #
列名称中允许使用字符,只要名称用方括号括起来即可。