Extraer datos de un archivo.mdb (Access) con python

Luego de mucho tiempo fuera de línea, me decidí a escribir sobre algo que me pareció muy interesante, resulta que por azares del destino tuve que extraer la información de un archivo mdb y para colmo de males desde una MAC; al principio probé usar una herramienta llamada MDB Explorer, aunque su precio es accesible, la verdad es que me sentía un poco molesto de no poder hacerlo más a mi propio estilo, fue entonces que me puse a investigar como tener acceso al contenido de una base de datos de Access desde Python; encontré un par de librerías (pyodbc y pypyodbc, de las cuales sólo funcionó la segunda al menos en MAC), pero aún no estaba satisfecho, fue entonces que por otro azar del destino encontré un script que decía poder extraer el contenido de las tablas de una base de datos en formato CSV, luego de analizar el código de dicho script, me decidí a leer un poco más sobre el uso de la herramienta que en realidad hace el trabajo, fue así  que descubrí mbd-tools, así que sin más fui al sitio de "MacPorts" y encontré que era posible instalar la suite de herramientas que contenía la herramienta necesaria para el fin que perseguía mediante:

sudo port install mdb-tools

Una vez instalada la suite de herramientas, probé sin éxito :( el script, pero como soy un tipo persistente, decidí hacerle un par de cambios, el resultado fue mi propia versión del script y que dejo aquí para aquellos que quieran hacer algún cambio.
Al mismo tiempo encontré otros usos interesantes para esta suite de herramientas, entre ellos:

mdb-sql -HFp -d ";" -i query.sql -o output.txt file.mdb

Que sirve para ejecutar una consulta SQL grabada en "query.sql" y verter el resultado de esa consulta en caso de ser necesario en "output.txt" desde nuestro archivo file.mdb.

SaluDoS!!!



#!/usr/bin/env python
#-*- encoding: utf-8 -*-

# This script use the mdb-tools for extract the MDB databases in .mdb files to CSV format,
# for MAC-OS, use "sudo port install mdb-tools" in another GNU/Linux OSs,
# consulte the documentation usually "sudo apt-get install", "sudo yum install" mdb-tools
# thanks to http://mazamascience.com/WorkingWithData/?p=168 by the original idea.
# Other interesting use: mdb-sql -HFp -d ";" -i query.sql -o output.txt file.mdb
# for execute a SQL query in .mdb files

__author__ = "ZoSemU?"
__mail__ = "zosemu@gmail.com"
__app_name__ = "Dump MDB"
__app_version__ = "1.0.0"
__original_idea__ = "http://mazamascience.com/WorkingWithData/?p=168"

import sys, os

def uso():
    print " ============================================================================== "
    print "|                         ", __app_name__, __app_version__, "by", __author__, "                          |"
    print " ============================================================================== "
    print "   [+] Usage: python ", sys.argv[0], "mdb_file.mdb"

def dump_data(mdb_file):
    # Get the list of table names
    tables = os.popen("mdb-tables -1 " + mdb_file).read().split("\n") 
    # Dump each table as a CSV"
    for table in tables:
        if table != '':
            filename = table.replace(" ","_") + ".csv"
            file = open(filename, 'w')
            print "Dumping", table
            contents = os.popen("mdb-export " + mdb_file + " " + table).read()
            file.write(contents)
            file.close()

if len(sys.argv) != 2:
    uso()
else:
    dump_data(sys.argv[1])

Comentarios

  1. Es muy interesante, gracias! ¿Podrías explicar un poco más el proceso de instalación y como correr el script? Como verás, no soy un experto en db ni en python.

    Software OS X 10.9.2 (13C64)

    ResponderEliminar
  2. Que bueno que te haya parecido interesante, ahora mismo no tengo tiempo de crear un tutorial para la instalación de MacPorts, pero con un poco de dominio en el ingles y la ayuda del traductor de google, seguro lo logras siguiendo la guía de instalación oficial de MacPorts que encuentras en el siguiente enlace: http://www.macports.org/install.php, una vez realizada la instalación lo siguiente es abrir una terminal (Aplicaciones/Utilidades/Terminal) y escribir el comando que deje arriba [sudo port install mdb-tools], con eso se instala el puerto (port) que permite correr el script, finalmente una vez instalado el puerto para correr el script:
    1) Descarga el código fuente desde el enlace que puse arriba (https://sites.google.com/site/zosemu/dump_mdb.py).
    2) Copia el script en la misma carpeta en donde tengas el archivo ".mdb" (eso sólo es para facilitar el proceso).
    3) Abres una terminal y te ubicas en la misma carpeta en donde pusiste el script y el archivo ".mdb" (si no sabes cómo, usa "cd " {ojo con el espacio después de la palabra "cd"} y arrastras la carpeta {que contiene el script} del finder a la terminal y das Enter).
    4) Finalmente invocas el script usando "python dump_mdb.py archivo.mdb".

    Nota 1: Si tienes un poco más de pericia puedes invocar el script usando la ruta absoluta a la carpeta en donde se encuentre el script y también puedes pasar como parámetro la ruta absoluta a la ubicación del archivo.

    Nota 2: Si copiaste el código fuente directo del blog y lo guardaste con otro nombre, debes usar el nombre que le hayas dado al script en el paso 4 y el "archivo.mdb" debe ser el de la base de datos.

    Espero que con esto, puedas hacer uso del script, SaluDoS!!!

    ResponderEliminar

Publicar un comentario

Tu opinión es importante compartela...

Entradas populares de este blog

Detener la sincronización de tiempo/fechas entre Host y Guest en Virtual Box

Solución al problema con odbc pgsql (postgresql) en Windows 7 de 64 bits