python - 我应该使用 pyodbc 还是 win32com 使用 python 填写 Microsoft Access 数据库 (.accdb) 中的预先存在的表格?
问题描述
我写了一个从word文档中提取字符串的python脚本。目标是然后将这些字符串插入到 Access 数据库中预先存在的表单中,保存它,创建表单的副本,从下一个 word 文档中插入不同的字符串,保存,重复。该表单已经包含我需要的所有字段,并且它具有“保存”和“创建副本”按钮。
我无法弄清楚如何将字符串插入 Access 表单。
到目前为止,我已经了解到至少有两种方法可以做到这一点,使用 pyodbc 或 win32com。
我使用了以下链接中的代码:
pyodbc - https://datatofish.com/how-to-connect-python-to-ms-access-database-using-pyodbc/
win32com -写入 MS Access 表,python 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
哪种方法更好/更容易使用,pyodbc 或 win32com?
另外,一旦我选择了一种方法,我该如何继续?我无法找到有关如何使用这些方法在 Access 中填写表单的文档。我发现的大部分内容都是关于如何在 Access 中填写表格,我不确定如何转录该代码以使用表单,或者该代码最初来自何处。
我没有包含从 word 文档中提取字符串的代码,这部分工作正常,并不是问题的一部分,只是背景信息。
任何正确方向的建议或指示将不胜感激。
解决方案
首先,MS Access 表单和报告不存储任何数据,而是在运行时应用与表或查询数据的可视交互。
其次,您的问题表明 MS Access 是一个多方面的东西,既是 GUI 应用程序又是数据库。因此,您的两种方法 (win32com
和pyodbc
) 有些明显不同并且部分重叠。通常,有两种方法可以与此软件进行交互:
前端
只需使用已安装的 Microsoft Office 软件 MSAccess.exe 以及所有启用的用户界面功能来设计和使用其对象:表格、查询、表单、报告、宏和模块。
通过编程代码,通过外部客户端(如 Excel VBA、Python 或任何其他与 COM 连接的语言或 API)连接到Microsoft Access 对象库。
在 Python 中,使用
win32com
允许您访问 MS Access 的 GUI 对象,其中包括表单和报告以及任何其他 Access 方法,例如DoCmd.TransferSpreadsheet
或Application.ImportXML
. 要运行查询,您需要访问 Access 应用程序对象的底层数据库。总的来说,这种方法需要在客户端计算机上安装成熟的 Office 应用程序 MSAccess.exe。
后端
使用几乎任何现代通用语言(如 Python)和相应的库连接到
.accdb
(或)文件的底层数据库,例如使用 ODBC 或 OLEDB。.mdb
在 Python 中,使用
pyodbc
(或adodbapi
)仅允许您与 Jet/ACE 数据库(Window .dll 文件)进行交互。您不能与任何GUI 对象(包括表单和报告)交互,而只能与表和存储的查询交互,并且只能使用由应用层调用的 SQL,这里是 Python。总的来说,这种方法不需要在客户端计算机上安装成熟的 Office 应用程序 MSAccess.exe。
话虽如此,对于您的特定需求,您可能不需要更长、更广泛win32com
的前端方法,因为 Access 表单旨在输入/更新/删除基础表中的数据。换句话说,它们是用户友好的数据处理方式。因此,只需绕过用户界面需要,将提取的 Word 数据直接导入到表单后面的数据库表中pyodbc
,这是一种更简单的后端方法。
具体来说,回答您的问题:
我编写了一个从 Word 文档中提取字符串的 Python 脚本。目标是然后将这些字符串插入到 Access 数据库中预先存在的表单中,保存它,创建表单的副本,从下一个 word 文档中插入不同的字符串,保存,重复。
首先,除了数据之外,没有人应该复制实际的表单对象。相反,使用对象和参数化将数据插入表单后面的数据源: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, ...))
该表单已经包含我需要的所有字段,并且它具有用于“保存”和“创建副本”的按钮。我无法弄清楚如何将字符串插入 Access 表单。
要保存,只需提交上述查询并复制,重复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()
我发现的大部分内容都是关于如何在 Access 中填写表格,我不确定如何转录该代码以使用表单,或者该代码最初来自何处。
同样,无需使用表单(无数据 GUI 对象),只需使用表单后面的表格即可。因此,使用pyodbc
或任何兼容的 MS Access 和 Python DB-API 来处理您的数据需求。
推荐阅读
- node.js - 如何使用 Nodejs 在 MongoDB 中删除Many
- python - 在字符串中查找年份(90-)
- php - 在 Blogger 中强制使用 HTTP(非 HTTPS)
- react-native - Atom 和 React Native 对齐
等标签 - javascript - 在 Rails 中使用“f.input 集合”的 onChange 方法
- android - Android Kotlin 将多个数组映射到对象列表中
- javascript - jquery中多个元素的Javascript onclick
- php - PHP - 任何简单的方法来制作这个数学方程?
- azure-functions - 如何获取 Azure Function App 的静态 IP 以将其列入白名单
- javascript - 我们如何使用安全标志来保护 cookie?