我应该使用 pyodbc 还是 win32com 来使用 python 填写 Microsoft Access 数据库 (.accdb) 中预先存在的表单?

Should I use pyodbc or win32com to fill out pre-existing forms in a Microsoft Access Database (.accdb) using python?

我写了一个 python 脚本,可以从 word 文档中提取字符串。目标是将这些字符串插入到 Access 数据库中预先存在的表单中,保存它,创建表单的副本,从下一个 word 文档中插入不同的字符串,保存,重复。表单已经包含我需要的所有字段,并且包含 'save' 和 'create duplicate.'

的按钮

我无法弄清楚如何将字符串插入 Access 表单。

到目前为止,我了解到至少有两种方法可以使用 pyodbc 或 win32com。

我使用了以下链接中的代码:

pyodbc - https://datatofish.com/how-to-connect-python-to-ms-access-database-using-pyodbc/

win32com -

我解决了将 64 位 python 连接到 32 位访问的问题,并且我能够使用 win32com 和 pyodbc 连接到我的 accdb 文件,但这是我所能得到的。

pyodbc:

import pyodbc

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\folder\my_database_file.accdb;')
cursor = conn.cursor()

win32com:

import win32com.client

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

connection = win32com.client.Dispatch(r'ADODB.Connection')

DSN = (
    r'PROVIDER=Microsoft.ACE.OLEDB.12.0;'
    r'DATA SOURCE=C:\path\folder\my_database_file.accdb;'
    )

connection.Open(DSN)

cmd = win32com.client.Dispatch(r'ADODB.Command')
cmd.ActiveConnection = connection

better/easier 使用哪种方法,pyodbc 还是 win32com?

此外,一旦我选择了一种方法,我该如何继续?我无法找到有关如何使用这些方法在 Access 中填写表单的文档。我发现的大部分内容都是关于如何在 Access 中填写表格的,我不确定如何转录该代码以改为使用表单,或者该代码最初来自何处。

我没有包括从 word 文档中提取字符串的代码,那部分工作正常,并且不是问题的真正部分,只是背景信息。

任何正确方向的建议或指示将不胜感激。

首先,MS Access 表单和报告不存储任何 数据,而是在运行 时应用与table 或查询数据的视觉交互。

其次,您的问题表明 MS Access 如何成为既是 GUI 应用程序又是数据库的 multifaceted thing。因此,您的两种方法(win32compyodbc)有些明显不同并且部分重叠。通常,有两种方式可以与该软件进行交互:

前端

  1. 只需使用已安装的 Microsoft Office 软件 MSAccess.exe,使用所有启用的用户界面功能来设计和使用其对象:tables、查询、表单、报告、宏和模块。

  2. 通过编程代码,通过外部客户端(例如 Excel、VBA、Python 或任何其他 COM- 连接到 Microsoft Access object library连接的语言或 API.

    在 Python 中,使用 win32com 允许您访问 MS Access 的 GUI 对象,其中包括表单和报告以及任何其他访问方法,如 DoCmd.TransferSpreadsheetApplication.ImportXML .要 运行 查询,您需要访问 Access 应用程序对象的基础数据库。总体而言,此方法需要在客户端计算机上安装成熟的 Office 应用程序 MSAccess.exe。

后端

  • 连接到 .accdb(或 .mdb)文件的基础数据库,例如使用几乎任何现代通用语言(如 [=85=)的 ODBC 或 OLEDB ] 与相应的库。

    在 Python 中,使用 pyodbc(或 adodbapi)仅允许您与 Jet/ACE 数据库(Window .dll 文件)进行交互。您不能与 任何 GUI 对象交互,包括表单和报告,但只能与 tables 和存储的查询交互,并且只能使用应用层调用的 SQL Python.总的来说,这种方法不需要在客户端计算机上安装成熟的 Office 应用程序 MSAccess.exe。


话虽如此,对于您的特定需求,您可能不需要更长、更广泛的 win32com 前端方法,因为 Access 表单旨在 enter/update/delete 基础 table 中的数据]s。换句话说,它们是用户友好的数据处理方式。因此,只需绕过用户界面需求,直接将提取的 Word 数据导入 pyodbc 表单后面的数据库 table,这是一种更简单的后端方法。

具体来说,回答你的问题:

I wrote a Python script that extracts strings from Word documents. The goal is to then insert these strings into a pre-existing form in an Access database, save it, create a duplicate of the form, insert different strings from the next word document, save, repeat.

首先,除了数据之外,任何人都不应复制实际的表单对象。相反,使用 cursor 对象和参数化将数据插入到表单 后面 的数据源中:

# APPEND QUERY WITH PARAMETERS
sql = """INSERT INTO myTableBehindmyForm (Field1, Field2, Field3, ...)
         VALUES (?, ?, ?, ...)
      """

# EXECUTE QUERY WITH TUPLE OF BINDED VALUES
cursor.execute(sql, (word_string1, wordstring2, wordstring3, ...))

The form already has all the fields I need, and it has buttons for 'save' and 'create duplicate. I'm having trouble figuring out how to insert strings into the Access form.

要保存,只需提交上述查询并复制,重复 cursor.execute 调用:

# EXECUTE QUERY WITH TUPLE OF BINDED VALUES
cursor.execute(sql, (word_string1, wordstring2, wordstring3, ...))
conn.commit()


# EXECUTE QUERY WITH TUPLE OF BINDED VALUES
cursor.execute(sql, (word_string1, wordstring2, wordstring3, ...))
cursor.execute(sql, (word_string1, wordstring2, wordstring3, ...))
conn.commit()

Most of what I find was on how to fill out tables in Access, and I'm not sure how to transcribe that code to work with forms instead, or where that code comes from in the first place.

同样,无需处理表单(无数据 GUI 对象),只需处理表单后面的 tables。因此,请使用 pyodbc 或任何兼容的 MS Access 和 Python DB-API 来处理您的数据需求。