我编写了一个python脚本,从word文档中提取字符串。目标是然后将这些字符串插入Access数据库中预先存在的表单中,保存它,创建表单的副本,从下一个word文档插入不同的字符串,保存,重复。表单已经有了我需要的所有字段,并且它有用于“保存”和“创建复制”的按钮。
我在弄清楚如何将字符串插入访问表单时遇到了困难。
到目前为止,我已经了解到至少有两种方法可以使用pyodbc或win32com。
我使用了以下链接中的代码:
吡啶- 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:\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中填写表,我不知道如何转录代码来使用表单,或者这些代码最初是从哪里来的。
我没有包含从word文档中提取字符串的代码,该部分工作正常,并不是问题的一部分,只是背景信息。
任何正确方向的建议或建议都将不胜感激。
发布于 2020-04-15 17:58:50
首先,MS Access窗体和报表不存储任何数据,而是在运行时应用与表或查询数据的可视化交互。
其次,您的问题显示了MS Access是如何既是GUI应用程序又是数据库的https://meta.stackexchange.com/questions/33216/ms-access-or-mdb-or-access-database-engine-or-ms-jet-ace。正因为如此,您的两种方法(win32com和pyodbc)有一些明显的不同和部分重叠。通常,与该软件交互的方式有两种:
前端
win32com可以访问methods的GUI对象,其中包括表单和报表以及任何其他访问方法,如DoCmd.TransferSpreadsheet或Application.ImportXML。要运行查询,需要访问access应用程序对象的基础数据库。总的来说,这种方法需要安装在客户端机器上的成熟的Office应用程序MSAccess.exe。后端
.accdb (或.mdb)文件的底层数据库,例如使用ODBC或OLEDB,使用任何现代的通用语言(如Python ),并使用相应的库。
在Python中,使用pyodbc (或adodbapi)只允许您与Jet/ACE数据库(窗口.dll文件)进行交互。您不能与任何GUI对象(包括表单和报表)交互,只能与表和存储的查询交互,并且只能使用由应用程序层调用的SQL (这里是Python )。总的来说,这种方法不需要在客户端机器上安装完整的Office应用程序MSAccess.exe。尽管如此,为了满足您的特定需求,您可能不需要更长、更广泛的win32com前端方法,因为访问表单的设计目的是在底层表中输入/更新/删除数据。换句话说,它们是对用户友好的数据处理手段.因此,只需绕过用户界面的需要,并使用pyodbc直接将提取的Word数据导入表单后面的数据库表中,这是一种简单得多的后端方法。
具体来说,要回答你的问题:
我编写了一个Python脚本,从Word文档中提取字符串。目标是然后将这些字符串插入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, ...))表单已经有了我需要的所有字段,它有“保存”和“创建副本”的按钮。我很难在访问表单中插入字符串。
为了保存,只需提交上面的查询和复制,重复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和Python来处理您的数据需求。
https://stackoverflow.com/questions/61232578
复制相似问题