使用 Python/pyodbc 插入 Access DB

Posted

技术标签:

【中文标题】使用 Python/pyodbc 插入 Access DB【英文标题】:INSERT INTO Access DB with Python/pyodbc 【发布时间】:2014-01-03 19:49:33 【问题描述】:

我正在尝试使用 Python/pyodbc 将一些 csv 数据插入到 Access 2007 数据库中。我在 Access 中测试了一个有效的追加查询,它选择标题和一行值。

INSERT INTO AssetDetails ( [Reporting Account Number], [As Of Date], [Asset Type], [Security Description 1], [Shares/Par], [Base Price], [Base Cost], CUSIP, Ticker, ISIN, SEDOL ) 
VALUES ("ABCD99020002", "1/31/2010", "CASH & CASH EQUIVALENTS", "INTEREST RECEIVABLE", "0.000", "1.00", "1,171,069.04", "", "", "", "");

在 pyodbc 中运行此查询会产生:

ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Invalid bracketing of name '[0.000]'. (-1002) (SQLExecDirectW)")

为了解决这个问题,我认为可能是数字周围的引号引起了问题。我继续进行以下查询:

SQL = '''INSERT INTO AssetDetails([Reporting Account Number], [As Of Date], [Asset Type], [Security Description 1], [Shares/Par], [Base Price], [Base Cost], CUSIP, Ticker, ISIN, SEDOL) VALUES ("AKPF99020002", "1/31/2010", "CASH & CASH EQUIVALENTS", "INTEREST RECEIVABLE", 0.00, 1.00, 1171069.04, "", "", "", "");'''

当我这样做时,我不妨删除 1171069.04 号码上每 3 位数字之间的逗号。这给出了一个错误

Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 5. (-3010) (SQLExecDirectW)')

我做了一些挖掘,似乎在引用不存在的列时会发生此错误。也许这表明列格式错误?因此,我将事情简化为一个非常简单的查询,以查看是否可以将 INSERT 任何内容添加到我的 Access 表中,只需 一个 字段(所有字段都不是必需的)。

cur.execute('INSERT INTO AssetDetails("SEDOL") VALUES ("123412")')

这也产生了

Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')

我也尝试过上面没有在 SEDOL 周围加引号或带括号的方法...

我快要疯了……有什么想法吗?

【问题讨论】:

对于字符串,您需要使用单引号 ' 而不是双引号 '"' 谢谢你...这是问题 【参考方案1】:

Access 通常接受'" 作为SQL 语句中的文本分隔符。但是,我似乎记得 Access ODBC 驱动程序在" 上存在问题,至少有时是这样。

所以用单引号试试吧。

SQL = """INSERT INTO AssetDetails
    (
        [Reporting Account Number],
        [As Of Date],
        [Asset Type],
        [Security Description 1],
        [Shares/Par],
        [Base Price],
        [Base Cost],
        CUSIP,
        Ticker,
        ISIN,
        SEDOL
    ) 
VALUES
    (
        'ABCD99020002',
        '1/31/2010',
        'CASH & CASH EQUIVALENTS',
        'INTEREST RECEIVABLE',
        '0.000',
        '1.00',
        '1,171,069.04',
        '',
        '',
        '',
        ''
    );"""

我的预感是,要么这会起作用,要么你会得到一个不同的错误。

【讨论】:

我删除了我的帖子,但看到了这个编辑得很好的回复。谢谢,这是我忽略的单引号。 不客气。感谢您取消删除这个问题。它应该对未来的读者有用。

以上是关于使用 Python/pyodbc 插入 Access DB的主要内容,如果未能解决你的问题,请参考以下文章

Python pyodbc 游标与数据库游标

Python pyodbc,如何返回sql控制台信息

Python 2.7 pyodbc 或 pymssql 与 R RODBC

如何使用 python pyodbc 检查表中是不是存在列?

使用 pyodbc 连接 mdb 表

Python pyodbc 连接到 ms 访问数据库