簡體   English   中英

使用Python以編程方式從.accdb文件導出所有表

[英]Export all tables from an .accdb file programatically using Python

我正在嘗試將accdb文件中的所有表導出到csv。 我正處於可以通過調出表名來導出表的階段。 不幸的是,我需要在成千上萬個文件中執行此操作,在這些文件中,我不會提前知道表的名稱。

我確信有某種方法可以檢索表的名稱,然后將其導出。 我使用以下代碼,通過調出表名“ TableX”來導出表

output = os.path.join(r"C:\Users\user\Desktop", 'Output.csv')
# OPEN ACCESS APP AND DATABASE
oApp = win32com.client.Dispatch("Access.Application")
oApp.OpenCurrentDatabase(accdbfile)

# EXPORT TABLE TO CSV
acExportDelim = 2
oApp.DoCmd.TransferText(TransferType=acExportDelim,
                            SpecificationName=None,
                            TableName="TableX",
                            FileName=output,
                            HasFieldNames=True)
#
oApp.DoCmd.CloseDatabase
oApp.Quit
oApp = None

我確信使用DoCmd命令可以返回所有表的名稱,然后我就可以遍歷這些表。 但不幸的是,我找不到找到這種方法的方法。 我知道下面的VBA代碼在accdb中可以導出所有表。 但不確定如何將其與Python集成

Option Compare Database
Public Sub ExportAll()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
In dbs.AllTables
    If Left(obj.Name, 4) <> "MSys" Then
        DoCmd.TransferText acExportDelim, , obj.Name, _
           Application.CurrentProject.Path & "\" & obj.Name & ".csv", True
        'DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
           obj.Name, Application.CurrentProject.Path & "\" & obj.Name & ".xls", True
    End If
Next obj
End Sub
  1. 從MSysObjects表中打開表名稱的記錄集

SELECT [Name] FROM MSysObjects WHERE [Type]=1 AND NOT [Name] LIKE "*Sys*";
那應該限制在您的數據表中,但是我確實在我的數據庫中注意到一個奇怪的名字:f_38D36B8B99D54B1DB8E6D145B51ADF90_Data

  1. 然后遍歷記錄集

  2. 連接TransferText方法中的[Name]字段

或遍歷TableDefs集合。 請問以下幫助:

#sample code to list all tables in the selected database
 daoEngine = win32com.client.Dispatch('DAO.DBEngine.36')
 dtbs = daoEngine.OpenDatabase('database_file.mdb')
 for table in dtbs.TableDefs:
 if table.Name[:4] <> "MSys" and table.Name[:4] <> "~TMP":

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM