[Python-es] Acceso a base de datos access 97 desde linux
damufo
damufo en gmail.com
Mar Abr 22 18:20:47 CEST 2008
Chema Cortes escribiu:
> El 2008/4/21 damufo <damufo en gmail.com> escribió:
>
>> Por fin he probado la solución indicada pero no he sido capaz de
>> conseguirlo.
>> He instalado unixODBC, mbdtools tambien otro paquete para tener el
>> /usr/lib/libmdbodbc.so, despues he configurado el unixodbc aunque no se si
>> lo he hecho bien. Mi codigo es este junto al error. Gracias.
>>
>>
>> import adodb
>> conn = adodb.NewADOConnection('access') # mxodbc required
>> dsn = "Driver={Microsoft Access Driver
>> (*.mdb)};DBQ=//home//damufo//prueba.MDB"
>> conn.connect(dsn)
>>
>>
>> Traceback (most recent call last):
>> File "proba.py", line 6, in <module>
>> conn.connect(dsn)
>> AttributeError: 'NoneType' object has no attribute 'connect'
>>
>> tambien he probado
>> #dsn = ("DRIVER={/usr/lib/libmdbodbc.so};DBQ=//home//damufo//prueba.MDB");
>
> Creo que este artículo se centra más en php que a python. El DSN que
> pone está pillado de la documentación del adodb-python, que es un
> ejemplo para ODBC windows, no para unixODBC. Además de ésto, hay que
> decir que el módulo adodb-python requiere mxODBC, un módulo comercial
> que, supongo yo, no has comprado (para php no es necesario).
>
> Si quieres una alternativa que sea libre y gratuita te aconsejo que
> pruebes con hk_classes (http://hk-classes.sourceforge.net) que incluye
> API para python. Funciona con varios drivers, entre los que se incluye
> mdbtools y unixodbc, siendo sólo necesario el primero para acceder a
> los ficheros de access. Un ejemplo rápido:
>
> import hk_classes
>
> dr=hk_classes.hk_drivermanager()
> con=dr.new_connection("mdb")
> con.connect()
>
> db=con.new_database("/ruta/al/fichero.mdb")
> print db.tablelist()
>
> tab=db.new_table("tabla")
> tab.enable()
>
> print tab.show_currentrow()
>
>
> La pega es que la documentación deja mucho qué desear; lo bueno es que
> puedes combinar el paquete hk_classes con el interface de knoda
> scriptándolo todo con python.
Muchas gracias por toda la ayuda.
He probado lo que me has indicado en el ubuntu 8.04 (beta), en mi caso
la instalación fue desde el synaptic en concreto los paquetes con sus
dependencias:
mdbtools
python-hk-classes
libhk-classes-mdb
libhk-classes-dev (este ultimo pienso queno era necesario)
El ejemplo que me has idicado funciona corerctamente pero no se porque
motivo al usar query no devueve nada. Chema, podrías probarlo con tu
ejemplo a ver si te funciona?
Sabes si hay forma de manejar esto con la especificación db api, algo
así como hace el adodbapi con la win32 en windows?
Mi código es:
import hk_classes
dr=hk_classes.hk_drivermanager()
con=dr.new_connection("mdb")
con.connect()
db=con.new_database("/home/usuario/access/basededatosacces.mdb")
print db.tablelist()
#hasta aquí correcto
query=db.new_resultquery()
query.set_sql("select * from tabla;")
query.enable()
query.goto_first()
print query.max_rows()
# no se porque motivo el query no devuelve registro alguno.
No se porque motivo al ejecutarse devuelve este aviso
I/O warning : failed to load external entity
"/home/informatico/.hk_classes/preferences"
creé el fichero pero no se que ponerle dentro.
Finalmente, me queda pendiente mirar el uso del knoda, no he entendido
bien para que lo puedo necesitar. Cuando lo mire comentaré algo por aquí.
Más información sobre la lista de distribución Python-es