2010-09-01 14 views
33

Qualcuno può indicarmi la giusta direzione su come aprire un file .mdb in python? Normalmente mi piace includere del codice per iniziare una discussione, ma non so da dove iniziare. Lavoro con mysql un bel po 'con Python. Mi stavo chiedendo se c'è un modo per lavorare con i file .mdb in modo simile?come gestire i file di accesso .mdb con python

risposta

41

Di seguito è riportato un codice che ho scritto per another SO question.
Richiede il numero di parte pyodbc module.

Questo esempio molto semplice si collegherà a una tabella ed esporterà i risultati in un file.
Sentiti libero di ampliare la tua domanda con eventuali esigenze più specifiche che potresti avere.

import csv, pyodbc 

# set up some constants 
MDB = 'c:/path/to/my.mdb'; DRV = '{Microsoft Access Driver (*.mdb)}'; PWD = 'pw' 

# connect to db 
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD)) 
cur = con.cursor() 

# run a query and get the results 
SQL = 'SELECT * FROM mytable;' # your query goes here 
rows = cur.execute(SQL).fetchall() 
cur.close() 
con.close() 

# you could change the mode from 'w' to 'a' (append) for any subsequent queries 
with open('mytable.csv', 'wb') as fou: 
    csv_writer = csv.writer(fou) # default field-delimiter is "," 
    csv_writer.writerows(rows) 
+1

Questo non sembra funzionare da Linux, dal momento che non vi è alcun driver incluso di default con pyodbc per la lettura di Access. "Nome origine dati non trovato e nessun driver predefinito specificato (0) (SQLDriverConnect)" – Cerin

+0

@Cerin: grazie per l'aggiornamento. Poiché la domanda non specificava "da Linux", non ho affrontato questo problema. I migliori saluti. – bernie

+1

@bernie c'è un modo per farlo in linux? – NumenorForLife

3
+1

Mentre questo link può rispondere alla domanda, è meglio per includere le parti essenziali della risposta qui e fornire il link di riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18943453) –

1

Oltre alla risposta di bernie, vorrei aggiungere che è possibile ripristinare lo schema del database. Il codice seguente elenca le tabelle (b [2] contiene il nome della tabella).

con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD)) 
cur = con.cursor() 

tables = list(cur.tables()) 

print 'tables' 
for b in tables: 
    print b 

Il codice di seguito elenca tutte le colonne di tutte le tabelle:

colDesc = list(cur.columns()) 
3

C'è il meza library by Reuben Cummings che può leggere i database Microsoft Access attraverso mdbtools.

installazione

# The mdbtools package for Python deals with MongoDB, not MS Access. 
# So install the package through `apt` if you're on Debian/Ubuntu 
$ sudo apt install mdbtools 
$ pip install meza 

Uso

>>> from meza import io 

>>> records = io.read('database.mdb') # only file path, no file objects 
>>> print(next(records)) 

Table1 
Table2 
… 
+0

funziona bene con Linux (testato in CenOs 7 e Ubuntu con python 2.7), modo molto semplice per leggere i dati da file .mdb. Grazie ;-) – serfer2

Problemi correlati