写入 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 VBA 修改 Excel 工作表而不写入 Drive
使用 python 将 pandas 数据框导入 MS Access 表