jueves, 24 de enero de 2013

MS Access desde Ubuntu con Python and Web2py

Tiempo al tiempo.

Hace unos días estoy trabajando en un sistema desarrollado en MS Access en el cual tengo que hacer una interfaz de consultas a la base de datos.
A la interfaz la estoy desarrollando con Web2py, framework que hasta el día de hoy me trajo mucha satisfacción.

¿Cómo abrimos una DB MS Access desde python?

La solución a esta pregunta la tiene el módulo pyodbc.
Desde la página pueden descargar el ejecutable para windows. Deben descargar el ejecutable dependiendo de su versión de Python que tengas instalado, o si están en un sistema de la familia Debian pueden utilizar apt. (sudo apt-get install python-pyodbc)
Para realizar la conexión en Windows necesitan una cadena de conexión (valga la redundancia) que la pueden obtener desde aquí:
  • http://code.google.com/p/pyodbc/wiki/ConnectionStrings

Conexión en Windows.

>>> import pyodbc
>>> cadena_conexion = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=C:\Users\Martin\Desktop\CPCE\cpcec.mdb;UID=user;PWD=password'
>>> c = pyodbc.connect(cadena_conexion)
>>> csr = c.cursor()
>>> csr.execute("select * from tablename")
>>> row = csr.fetchone()
>>> print row

Conexión en GNU/Linux Ubuntu

Para conectar una DB MS Access en Ubuntu necesitamos un set de herramientas.
Las instalaciones desde la línea de comandos son las siguientes:
  • sudo apt-get install mdbtools
  • sudo apt-get install libmdbodbc1
  • sudo apt-get install python-pyodbc
Una vez instaladas las herramientas procedemos a una pequeña configuración, para ello necesitamos editar un par de archivos.
  •  sudo nano /etc/odbcinst.ini
    [MDBTools]
    Description = MDBTools Driver
    Driver = libmdbodbc.so.1
    Setup = libmdbcodbc.so.1
    FileUsage = 1
    UsageCount = 1
     
  •  sudo nano /etc/odbc.ini
    [MiConexion]
    Description = Microsoft Access Try DB
    Driver = MDBTools
    Database = /path/database.mdb
    Servername = localhost
    Username = User
    Password = Password
Una vez configurado el archivo de conexión ingresamos a un interprete de Python y chequeamos.

>>> import pyodbc
>>> c = pyodbc.connect('DSN=MiConexion')
>>> csr = c.cursor()
>>> csr.execute(" select * from tablename")
>>> row = csr.fetchone()
>>> print row

Conexión con la DAL desde Web2py en GNU/Linux.

Debemos seguir los pasos de configuración mencionados anteriormente, luego ingresamos al archivo db.py en el directorio models de nuestra aplicación y en la instanciación de la DAL agredamos la cadena de conexión.

  • db = DAL('mssql://DSN=MiConexion')
Para hacer una prueba podemos hacer lo siguiente:

>>> python /path/web2py/web2py -M -S myapp
>>> db.executesql('select * from tablename')

Espero que les sirva, un abrazo.

Martín.

P/d: MS Access es una c*gada. :)