【问题标题】:Access insert into values访问插入值
【发布时间】:2019-02-15 04:12:30
【问题描述】:

我在 Access 中创建了一个表并且连接正常,但是我使用 iterrows() 循环通过我的数据框引发了语法错误。

我已尝试删除空格并更改语法。

for index, row in futures_table.iterrows():
    cursor.execute('''
                    INSERT INTO cme_oil_futures (MONTH,SETTLE,DATE,REPORT_TYPE)
                    VALUES (?,?,?,?)
                ''',(row['MONTH'],row['SETTLE'],row['DATE'],row['REPORT_TYPE']))
    conn.commit()

预期结果是在我的数据框中的“MONTH”、“SETTLE”、“DATE”和“REPORT_TYPE”列中插入每一行的值。

我得到的错误是“

发生异常:pyodbc.ProgrammingError ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句中的语法错误。(-3502) (SQLExecDirectW)') 文件“E:\Python\DDWebsraping\cme_oil.py”,第 83 行,在 ''',(row['MONTH'],row['SETTLE'],row['DATE'],row['REPORT_TYPE']))

【问题讨论】:

  • 为什么不用futures_table.to_sql() 而不是迭代?
  • 如何连接access数据库,只是futures_table.to_sql("table", engine, if_exists='append')?
  • ? 是正确的占位符令牌吗?
  • @JohnGordon 我想知道,我检查了其他问题,似乎是正确的。
  • 嗯。 DATE 是保留字吗?

标签: python pandas ms-access


【解决方案1】:

试试下面的代码。我认为您只需要在字段周围加上括号。 MS Access 是一头奇怪而神秘的野兽。

for index, row in futures_table.iterrows():
    cursor.execute('''
                    INSERT INTO cme_oil_futures ([MONTH],[SETTLE],[DATE],[REPORT_TYPE])
                    VALUES (?,?,?,?)
                ''',(row['MONTH'],row['SETTLE'],row['DATE'],row['REPORT_TYPE']))
    conn.commit()

【讨论】:

  • 现在使用它会给出以下似乎很常见的错误:'Exception has occurred: pyodbc.Error ('HYS22', "[HYS22] [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句包含以下未知字段名称:'MONTH'。确保您输入的名称正确,然后重试该操作。(-1507) (SQLExecDirectW)")'
  • FWIW,只有 MonthDate 需要用方括号括起来,因为它们是 MS Access 中的 reserved words
  • 保留字如何让数据库奇异而神秘的野兽
  • 这只是我的意见。我认为 Access 的 SQL 方言是最糟糕的语言之一,我认为总的来说 Access 会做出很多我不同意的决定。就像,在这种情况下,我宁愿他们只是不允许某人创建与保留字名称相同的列。保留字应该是保留的意思!这样我们就不需要知道深奥的语法,比如必须在保留字周围加上括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多