现在不要困惑,我知道pyodbc库,以及它如何连接到受密码保护的Access文件。
我要问的是是否有一种Python方式来永久更改Access文件的密码。
更具体地讲我的问题:
我有一个受密码保护的Microsoft Access文件,我需要运行直接连接到该Access文件的Tableau Prep Flow。 (例如,我需要每天运行一次)
Tableau Prep文件不存储连接信息,例如密码。
((我可以从命令行运行Tableau Prep,并给它提供带有凭据的JSON文件,但是到目前为止,我所学到的内容不支持Access。)
所以到目前为止,我的想法/解决方案是(在python脚本中):1-从Access文件中删除密码(如何?)。 2-从命令行运行批处理文件以播放Tableau Prep(不会再出现错误,因为不再有密码)。 3-恢复密码。
TLDR:需要一种使用Python脚本删除Access DB密码的方法,以便我可以完全自动化运行Tableau Prep文件的过程。(顺带一提,我全都渴望新的建议)
您可以使用COM来加密/解密数据库。这要求以匹配的位数安装Access数据库引擎,但是如果您可以使用ODBC驱动程序,您已经知道了。
from comtypes.client import CreateObject import os DBEngine = CreateObject('DAO.DBEngine.120') dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0' #Create a copy without a password db = DBEngine.CompactDatabase('Path_to_database', 'Path_to_copy', dbLangGeneral + ';PWD=', password = ';PWD=MySuperSecretPass') db.Close() #Do stuff with copy #Delete original os.remove('Path_to_database') #Create encrypted copy at location of original db = DBEngine.CompactDatabase('Path_to_copy', 'Path_to_database', dbLangGeneral + ';PWD=MySuperSecretPass') db.Close() os.remove('Path_to_copy')
正如您在代码中所看到的,您实际上不能在本地对数据库进行加密/未加密,但是可以使用
CompactDatabase
进行加密/未加密的副本。通过GUI加密时,您会注意到Access实际上在后台执行相同的操作。
此代码假定您使用dbLangGeneral
作为排序规则常量,可以根据需要使用其他排序规则进行切换。