come trattare con i file di accesso mdb con Python
Domanda
Qualcuno può punto me nella giusta direzione su come aprire un file mdb in Python? Io normalmente come l'inclusione di codice per iniziare una discussione, ma non so da dove cominciare. Io lavoro con mysql un bel po 'con Python. Mi chiedevo se esiste un modo per lavorare con i file mdb in un modo simile?
Soluzione
Di seguito è riportato un codice che ho scritto per un'altra domanda SO .
Richiede l'3rd-party pyodbc modulo .
Questo esempio molto semplice si collegherà ad un tavolo ed esportare i risultati in un file.
Sentitevi liberi di estendere la tua domanda con qualsiasi necessità più specifiche che potreste 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)
Altri suggerimenti
Questo sembra simile a una domanda precedente:
- cosa ho bisogno di leggere Microsoft database di Access utilizzando Python?
- http: // codice. activestate.com/recipes/528868-extraction-and-manipulation-class-for-microsoft-ac/
risposta ci dovrebbe essere utile.
C'è la Meza libreria Reuben Cummings che può leggere i database Microsoft Access tramite 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
…
In aggiunta alla risposta di Bernie, vorrei aggiungere che è possibile recuperare lo schema del database. Il codice di seguito sono elencate 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 seguente elenca tutte le colonne di tutte le tabelle:
colDesc = list(cur.columns())
Per una soluzione che funziona su qualsiasi piattaforma in grado di eseguire Java, è consigliabile utilizzare Jython o JayDeBeApi insieme al UCanAccess driver JDBC. Per i dettagli, consultare la relativa domanda
Leggi un database di Access in Python su piattaforma diversa da Windows (Linux o Mac)