2016-05-30 5 views
1

Ich versuche, das Schema aus Microsoft Access-Datenbanken als Teil eines größeren Projekts zum Zusammenführen von ~ 300 Datenbanken zu extrahieren. Mit meinem aktuellen Code kann ich nur Tabellennamen und keine Feldnamen abrufen.Kann ich Schemainformationen aus leeren Access-Tabellen mit Python extrahieren?

Ich habe mit diesem win32com Code-Schnipsel, aber ich bin offen für andere Vorschläge (http://code.activestate.com/recipes/528868-extraction-and-manipulation-class-for-microsoft-ac/?in=user-4074475)

db = AccessDb('''c:\x.mdb''') 
tbls = db.getTables() 
for tbl in tbls: 
    fields = tbl.getFields() 
    for field in fields: 
     print '%s - %s' %(tbl,field) 
+0

Sollte es nicht so sein wie 'print '% s -% s'% (tbl.Name, field.Name)'? – marlan

+0

@marlan - das ist, was ich erwartet habe, aber tbl.getFields() hat nichts zurückgegeben - wahrscheinlich durch meine Unkenntnis, wie man es richtig anwendet. – tomtomnz

Antwort

1

Mit den cursor.tables() und cursor.columns() Methoden in Pyodbc die Informationen, die Sie suchen, auch für leere offenbare Tabellen. Zum Beispiel

# -*- coding: utf-8 -*- 
import pyodbc 
connStr = (
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" 
    r"DBQ=C:\Users\Gord\Desktop\Test.accdb;" 
    ) 
conn = pyodbc.connect(connStr) 
crsr = conn.cursor() 
table_list = [x[2] for x in crsr.tables() if x[3]=='TABLE'] 
for table_name in table_list: 
    column_list = [x[3] for x in crsr.columns(table_name)] 
    for column_name in column_list: 
     print('[{0}].[{1}]'.format(table_name, column_name)) 
crsr.close() 
conn.close() 

Siehe Pyodbc cursor Dokumentation für weitere Details.

Verwandte Themen