我编写了一个从word文档中提取字符串的python脚本。目标是将这些字符串插入Access数据库中预先存在的表单中,保存它,创建表单的副本,插入下一个单词文档中的不同字符串,保存,重复。该表单已经包含了我需要的所有字段,并且有"保存"one_answers"创建重复项"按钮
我很难弄清楚如何在Access表单中插入字符串。
到目前为止,我已经了解到至少有两种方法可以做到这一点,使用pyodbc或win32com。
我使用了来自以下链接的代码:
pyodbc-https://datatofish.com/how-to-connect-python-to-ms-access-database-using-pyodbc/
win32com-写入MS访问表,python win32com
我解决了将64位python连接到32位访问的问题,并且能够使用win32com和pyodbc连接到我的accdb文件,但这是我所能做到的。
pyodbc:
import pyodbc
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:pathfoldermy_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:pathfoldermy_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。
后端
-
连接到
.accdb
(或.mdb
)文件的底层数据库,例如使用ODBC或OLEDB,使用任何现代通用语言(如Python)及其相应库。在Python中,使用
pyodbc
(或adodbapi
)只允许与Jet/ACE数据库(Window.dll文件)进行交互。您不能与任何GUI对象交互,包括表单和报告,只能与表和存储的查询交互,并且只能使用应用层调用的SQL(这里是Python)。总的来说,这种方法不需要在客户端计算机上安装完整的Office应用程序MSAccess.exe。
也就是说,对于您的特定需求,您可能不需要更长、更广泛的win32com
前端方法,因为Access表单是为在底层表中输入/更新/删除数据而设计的。换句话说,它们是用户友好的数据处理手段。因此,只需绕过用户界面需求,使用pyodbc
(一种简单得多的后端方法)将提取的Word数据直接导入表单后面的数据库表中。
具体来说,回答您的问题:
我写了一个Python脚本,从Word文档中提取字符串。目标是将这些字符串插入Access数据库中预先存在的表单中,保存它,创建表单的副本,插入下一个单词文档中的不同字符串,保存,重复。
首先,除了数据之外,任何人都不应该复制实际的表单对象。相反,使用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, ...))
表单已经有了我需要的所有字段,并且有"保存"one_answers"创建重复项"按钮。我很难弄清楚如何在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来处理您的数据需求。