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?

È stato utile?

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

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top