Pregunta

Puede alguien punto en la dirección correcta sobre cómo abrir un archivo .mdb en Python mí? Yo normalmente como incluir algún código para empezar una discusión, pero no sé por dónde empezar. Yo trabajo con MySQL un poco justo con el pitón. Me preguntaba si hay una manera de trabajar con archivos .mdb de una manera similar?

¿Fue útil?

Solución

A continuación se muestra un código que escribí para otra pregunta SO .
Se requiere que el tercero-partido pyodbc módulo .

Este ejemplo muy simple se conectará a una mesa y exportar los resultados a un archivo.
No dude en ampliar su pregunta con las necesidades más específicas que pueda tener.

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)

Otros consejos

No es la href="https://github.com/reubano/meza" rel="nofollow noreferrer"> biblioteca que puede leer bases de datos Microsoft Access a través de mdbtools .

instalación

# 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
…

Además de la respuesta de Bernie, me gustaría añadir que es posible recuperar el esquema de la base de datos. El código siguiente muestra las tablas (b [2] contiene el nombre de la tabla).

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

El código siguiente muestra todas las columnas de todas las tablas:

colDesc = list(cur.columns())

Para una solución que funciona en cualquier plataforma que permita utilizar Java, considere usar Jython o JayDeBeApi junto con el controlador JDBC UCanAccess . Para más detalles, consulte la pregunta relacionada

Leer una base de datos en Python en la plataforma que no sea Windows (Linux o Mac)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top