我正在尝试从头开始编写2003 mdb文件。我已经有了一个包含表和列名的文件(我有112列)。在我的尝试中,我从pandas数据帧(代码中命名的部分)中读取行,并将这些行附加到mdb文件中。但是,在使用pyodbc INSERT-INTO语法时,它给了我以下错误:
ProgrammingError: ('42000', "[42000] [Microsoft][Driver ODBC Microsoft Access] Expression syntax error 'Equatorial-TB-BG-CA_IRI-1.0_SNP-1.0_ACA-0_ESAL-1000'. (-3100) (SQLExecDirectW)")
这是我的密码:
for k in range(len(sections)):
cols = tuple(list(sections.columns))
vals = tuple(list(sections.iloc[k]))
action = 'INSERT INTO SECTIONS {columns} VALUES {values}'.format(columns = str(cols).replace("'",""), values = str(vals).replace("'",""))
cursor.execute(action)
conn.commit()
有人知道我为什么会有这样的问题吗
实际上,这不是一个特定于访问的错误,而是一个一般的SQL错误,其中字符串没有正确地用引号括起来。因此,访问引擎假定它们是命名字段,而引擎假定您运行的是减法表达式,因此连字符使这些字段更加复杂
要演示这个问题,请参见下面的“填写未知值”。注意,
VALUES
中传递的字符串项没有被引用:现在,您可以在
str(vals)
中替换单引号:但更好的是,考虑使用qmark占位符参数化查询并将值作为参数传递(第二个参数是
cursor.execute(query, params)
)。这样可以避免引用或取消引用字符串或数值:更妙的是,使用准备好的语句避免任何
executemany
或DataFrame.values.tolist()
的循环:相关问题 更多 >
编程相关推荐