web-dev-qa-db-fra.com

comment gérer les fichiers d'accès .mdb avec python

Quelqu'un peut-il m'orienter dans la bonne direction sur la façon d'ouvrir un fichier .mdb en python? J'aime normalement inclure du code pour démarrer une discussion, mais je ne sais pas par où commencer. Je travaille assez bien avec mysql avec python. Je me demandais s'il y avait un moyen de travailler avec des fichiers .mdb de la même manière?

39
Richard

Ci-dessous se trouve du code pour lequel j'ai écrit ne autre SO question .
Il nécessite le tiers module pyodbc .

Cet exemple très simple va se connecter à une table et exporter les résultats dans un fichier.
N'hésitez pas à développer votre question en répondant à vos besoins spécifiques.

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)
46
bernie
4
pyfunc

Il y a la bibliothèque meza de Reuben Cummings qui peut lire les bases de données Microsoft Access via mdbtools .

Installation

# 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

Usage

>>> from meza import io

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

Table1
Table2
…
3
jnns

Pour une solution qui fonctionne sur n'importe quelle plate-forme capable d'exécuter Java, envisagez d'utiliser Jython ou JayDeBeApi avec le pilote JDBC CanAccess . Pour plus de détails, voir la question connexe

Lire une base de données Access dans Python sur une plate-forme non Windows (Linux ou Mac)

1
Gord Thompson

En plus de la réponse de bernie, j'ajouterais qu'il est possible de récupérer le schéma de la base de données. Le code ci-dessous répertorie les tables (b [2] contient le nom de la table).

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

Le code ci-dessous répertorie toutes les colonnes de toutes les tables:

colDesc = list(cur.columns())
1
mmicoski