【发布时间】: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 一样!
标签: python ms-access insert win32com