[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