使用 Pyodbc 插入 Access 2013 时出现语法错误

Syntax error when inserting into Access 2013 with Pyodbc

我正在使用 Pyodbc 并尝试将值插入到 Microsoft 2013 Access 数据库中。但是,每次我 运行 代码都会在执行行出现错误:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. (-3502) (SQLExecDirectW)')

有没有人知道如何解决这个问题?我把我的代码放在下面。

conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Database2.accdb;")
cur=conn.cursor()
sql="""INSERT INTO Invoices (LINE TYPE,INVOICE NUMBER) VALUES (?,?)"""
cur.execute(sql,("Line","41243"))

名称中有空格的列需要用方括号括起来:

sql="""INSERT INTO Invoices ([LINE TYPE],[INVOICE NUMBER]) VALUES (?,?)"""

如果您可以控制 table 设计,我会考虑从列名中删除空格,将其替换为下划线 (LINE_TYPE) 或使用 Pascal 大小写 (LineType).

语法错误在你的 SQL:

INSERT INTO Invoices (LINE TYPE,INVOICE NUMBER) VALUES (?,?)

我还没有遇到过允许您引用名称中包含空格的列而无需特别分隔列名的 DBMS。在Access SQL、as in SQL Server中,使用的分隔符是方括号;所以你必须写:

INSERT INTO Invoices ([LINE TYPE], [INVOICE NUMBER]) VALUES (?,?)

SQL 标准使用双引号,但大多数供应商并不特别在意是否符合该标准。另见:SQL standard to escape column names?