[Python-es] Access y Python

Chema Cortes pych3m4 en gmail.com
Mie Nov 21 11:20:03 CET 2012


El día 21 de noviembre de 2012 00:10, Gonzalo Mouriÿfffffffffff1o
Pardo <gmourinopardo en yahoo.es> escribió:
> Muchas gracias a todos por vuestras rápidas respuestas, por fin he podido
> hacerme con el fichero.
> Ahora, si que vienen las dudas.
> Estoy intentando crear una base de datos desde python, y no se como hacerlo,
> de momento he podido acceder a  una creada por access. gracias.
> P.D.: Alguien sabe de algún tutorial o libro que vincule microsoft access
> con python?

Como libro, el de "Python Programming on WIN32" de Mark Hammond tiene
un capítulo dedicado a bases de datos. (Creía recordar que este
capítulo en concreto estaba disponible gratis en internet, pero no lo
encuentro).

De todos modos, te recomiendo usar ADOdbapi[1] para acceder a bases de
datos, access y excel que viene incluído con pywin32 (no confundir con
el otro módulo 'adodb' inspirado en PHP-adodb). ADOdbapi sigue la
DB-API2[2], que es el estándar usado en python para acceso a bases de
datos. Casi cualquier tutorial de bases de datos en python te puede
servir.

La dificultad la tendrás en las cadenas de conexión. Yo suelo usar
conexiones DSNLess que no requieren de configuración adicional en el
equipo. Por ejemplo:

import adodbapi

def DSNAccess(datasource):
    return "Driver={Microsoft Access Driver (*.mdb)};"\
           "Dbq=%s;Uid=Admin;Pwd=;"%datasource

def DSNJet(datasource):
    return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;"%datasource

def DSNExcel(datasource,HDR="Yes"):
    return DSNJet(datasource)+'Extended Properties="Excel
8.0;HDR=%s;IMEX=1"'%HDR


con=adodbapi.connect(DSNJet(r"C:\ruta\al\fichero.mdb"))
cur=con.cursor()
query="""select nombre, `In/Out`,`Código` from `Población` order by `Código`"""
cur.execute(query)

print cur.fetchall()


Detalles:

- en comparación, el motor JET es más rápido y da menos problemas con
SQL que el ODBC de access.
- observa cómo se "escapan" los nombres de campos (diferente a como se
hace en access y SQL-92)
- las cadenas de conexión pueden ser diferentes en tu máquina


Por completitud, además de este modo se puede usar access de otras tres formas:

- odbc+mdbtools : multiplataforma, aunque bastante inestable
- odbc+zxJDBC(jython) : usa el enlace jdbc-odbc de java (sólo para windows)
- jackess+jython/jpype : usa la librería java jackess multiplataforma
desde jython o a través de jpype.




[1]: http://adodbapi.sourceforge.net
[2]: http://www.python.org/topics/database/DatabaseAPI-2.0.html

-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales


Más información sobre la lista de distribución Python-es