写入 MS Access 表,python win32com

Posted

技术标签:

【中文标题】写入 MS Access 表,python win32com【英文标题】:Write to MS Access table, python win32com 【发布时间】:2016-11-07 22:54:22 【问题描述】:

我正在使用 python 的 win32com.client 来尝试向 MS Access 表写入/插入一行。我找到了一个如何连接和查询 Access 表 here 的示例。基本上,他们的代码稍作修改供我自己使用是:

import win32com.client

connection = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=c:\\testdb.mdb;'
connection.Open(DSN)
recordset = win32com.client.Dispatch(r'ADODB.Recordset')
recordset.Open('SELECT * FROM Table1', connection, 1, 3)
fields_dict = 
for x in range(recordset.Fields.Count):
    fields_dict[x] = recordset.Fields.Item(x).Name
    print fields_dict[x], recordset.Fields.Item(x).Value

所以这告诉我如何在 Access 表上执行 select 语句。我希望能够将行和数据写入表。在将 win32com 用于 MS Office 产品时,我倾向于潜入MSDN pages 并尝试将 VBA 代码解释为 python 代码,但这让我有点束手无策。再加上经过长时间搜索后在互联网上没有找到示例,这让我再次猜测这是否可能?希望有人以前玩过这个并有建议。

【问题讨论】:

如果您可以使用 win32com 执行SELECT 语句,那么您也可以执行INSERT 语句,尽管为ADODB.Command 对象指定参数会有些冗长。一种更常见的方法是使用带有 Access ODBC 驱动程序的 pyodbc(或者可能是 pypyodbc)来执行此类简单的 CRUD 操作,并保存 win32com 以使用 Access DAO 对数据库执行较低级别的操作,例如,对 Access DDL 进行结构更改无法处理。 感谢上帝。如果可以的话,我想坚持使用 win32com。我通过搜索查看了 pyodbc 在我的旅行中。如果这不成功,我会去那里。 搭载@GordThompson 的评论,MS Access 既是后端数据库又是 GUI .exe 应用程序。当打算运行像插入行这样的 SQL 语句时,可以像使用其他 RDMS 一样考虑 db api 连接(例如 odbc):SQLite、SQL Server、mysql 等。当需要调整表单/报告/宏/模块时,运行 Access 应用程序方法比如DoCmd.*,或者其他应用层然后使用COM接口。请记住,VBA 是 Access.exe 的外部组件,COM 连接就像您使用 Python 一样! 【参考方案1】:

正如我在对该问题的评论中提到的,使用 pyodbc(或 pypyodbc)和 Access ODBC 驱动程序是一种更常见的 CRUD 操作方式,但如果您真的想要使用 win32com 和OLEDB 那么你可以像这样做一个UPDATE

import win32com.client

# ADODB constants
adVarWChar = 202
adInteger = 3
adParamInput = 1

connection = win32com.client.Dispatch(r'ADODB.Connection')
DSN = (
    r'PROVIDER=Microsoft.Jet.OLEDB.4.0;'
    r'DATA SOURCE=C:\Users\Public\mdbTest.mdb;'
    )
connection.Open(DSN)
cmd = win32com.client.Dispatch(r'ADODB.Command')
cmd.ActiveConnection = connection
cmd.CommandText = "UPDATE Donors SET LastName = ? WHERE ID = ?"
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255))
cmd.Parameters.Append(cmd.CreateParameter("?", adInteger, adParamInput))
cmd.Parameters(0).Value = "Thompson"
cmd.Parameters(1).Value = 10
cmd.Execute()
connection.Close()

【讨论】:

感谢上帝。我做了一些修改供我自己使用,并让你的脚本为我工作。我也在仔细研究 pyodbc。你是一个很好的帮助。干杯。

以上是关于写入 MS Access 表,python win32com的主要内容,如果未能解决你的问题,请参考以下文章

MS Access - 更改表单中的值后立即写入表

MS Access VBA 修改 Excel 工作表而不写入 Drive

使用 python 将 pandas 数据框导入 MS Access 表

使用 Pyodbc 在 MS Access 表中写入新行的问题

MS Access VBA 更新组合框表字段

使用 VBA 从 MS Access 表创建格式化文本文件