>我正在使用 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 标准以转义列名?