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

时间:2015-01-15 20:01:24

标签: python ms-access-2013 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"))

2 个答案:

答案 0 :(得分:3)

名称中包含空格的列需要用括号括起来:

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

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

答案 1 :(得分:2)

语法错误在您的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?