如何使用 Python 压缩和修复 Access 数据库 3

How to compact and repair an Access database using Python 3

我正在尝试使用 Python 3(在我的情况下具体为 3.7)到 运行 Access 2016 数据库的 'Compact and Repair Database' 函数,在 Windows 10 .

有一个示例 here,但这似乎是针对 Python 2.7 和 MS Access 2010 的。我将语法稍微调整为:

import os
import win32com.client

srcDB = r'C:\My\Database\Path\My_Db.accdb'
destDB = r'C:\My\Database\Path\My_Db_PyBackup.accdb'

oApp = win32com.client.Dispatch("Access.Application")
oApp.compactRepair(srcDB, destDB)
oApp.Application.Quit()
oApp = None

os.remove(destDB)

我没有收到任何错误,脚本 运行 成功。但是,文件大小保持不变 - 我仍然必须打开数据库并手动 'Compact and Repair Database'.

因此我想知道是否有适用于更新版本的 Python 和 Access 的不同方法,或者我是否遗漏了什么。

感谢 4dmonstercompactRepair() 功能的更详细解释,看起来上面确实按预期工作:

CompactRepair(SourceFile, DestinationFile, LogFile)SourceFile Required String - The full path and filename of the database or project file to compact and repair. DestinationFile Required String - The full path and filename for where the recovered file will be saved. LogFile Optional Boolean - True if a log file is created in the destination directory to record any corruption detected in the source file. A log file is only created if corruption is detected in the source file. If LogFile is False or omitted, no log file is created, even if corruption is detected in the source file.

因此,destDB是压缩后的数据库。

通过几行额外的代码,我可以达到预期的效果。首先,使用 os.remove() 删除原始的、未压缩的数据库 srcDB。然后使用 os.rename() 重命名新数据库 destDB 使其与原始数据库同名。

因此,完整的代码块如下所示:

import os
import win32com.client

srcDB = r'C:\My\Database\Path\My_Db.accdb'
destDB = r'C:\My\Database\Path\My_Db_PyBackup.accdb'

oApp = win32com.client.Dispatch("Access.Application")
oApp.compactRepair(srcDB, destDB)
oApp.Application.Quit()
oApp = None

os.remove(srcDB)
os.rename(destDB, srcDB)

这样就得到了一个经过压缩和修复的数据库,它与原始文件名相同。