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



>我正在使用 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 (?,?)"""

如果您可以控制表设计,我会考虑从列名中删除空格,用下划线 ( LINE_TYPE ) 或使用帕斯卡大小写 ( LineType ) 替换它们。

语法错误在您的 SQL 中:

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

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

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

SQL标准使用双引号,但大多数供应商并不特别关心是否符合标准。另请参阅:SQL 标准以转义列名?

最新更新