linux + python + access

Juan Ignacio Rodríguez de León jileon en parcan.es
Vie Abr 1 13:52:53 CEST 2005


xisco b wrote:
> Hola,
> me gustaría hacer lo siguiente, pero no sé si es posible
> Vereis, en mi empresa usan una base de datos msaccess, con la que a mi
> no me queda más remedio que trabajar.
> Me gustaría hacer una aplicación en python para acceder a ella desde
> linux, ya sea directamente o usando algún script que me transformara
> los datos a mysql y después al final del trabajo los volviera a pasar
> a formato access.

Yo tuve un problema similar, y lo resolví de la siguiente manera:

- Instalé en la máquina donde estaba el fichero access un servidor web 
(Apache)

- Instalé en la misma máquina Python

- Escribí dos pequeños scripts de python, (Que adjunto en formato rar, 
aunque no se si la lisla admite adjuntos). Uno (server.py) debe ser 
copiado en un directorio que se deba llmar xmldb, dentro del cgi-bin del 
apache, y actua como un servidor. El otro es un cliente (client.py, no 
soy muy original para los nombres), lo pones en la máquina linux en un 
directorio xmldb que esté en cualquier sitio en que pueda
ser importado por python (site-packages, sería lo recomendable).

La historieta funciona así: client.py implementa una clase DATABASE que 
actua como si fuera una conexión de base de datos (Puedes obtener un 
cursor, ejecutar una sentencia sql, hacer un fetch*, etc...). Las 
peticiones son enviadas, en formato XML, como una petición HTTP al 
servidor.

El servidor obtiene la consulta, la ejecuta via ODBC en la máquina 
donsde está la base de datos, y el resultado es enviado, de nuevo en 
formato XML, al cliente. Este lo parsea, hace las conversiones 
pertinentes y devuelve el resultado. Por ejemplo, si hacemos una 
consulta SELECT, un fetchall nos retornaría un array de tuplas, de la 
misma forma que lo haría una conexión ODBC normal.

Por ejemplo, si suponemos que la base de datos está en la máquina
192.168.23.22, y que en esa máquina hay una entrada ODBC para el
fichero access, identificada como 'TURURU', que apunta al fichero access 
de marras, y si hemos copiado la carpeta xmldb
en el directorio cgi-bin del servidor y también en el directorio
site-packages del cliente, el siguiente código debería funcionar
en la máquina cliente:

 >>> from xmldb import cliente
 >>> db = cliente.DATABASE('192.168.23.22', 'TURURU')
 >>> cur = db.cursor()
 >>> cur.execute('Select * from Isla')
 >>> for row in cur.fetchall():
...     print row
...
(8.0, 'La Graciosa')
(2.0, 'Fuerteventura')
(3.0, 'Gran Canaria')
(4.0, 'La Gomera')
(5.0, 'Lanzarote')
(6.0, 'La Palma')
(7.0, 'Tenerife')
(1.0, 'El Hierro')

Ojo, porque el servidor intentará ejecutar cualquier sentencia que se le 
envíe, incluidos los insert, delete, drop table, etc.... De todas 
formas, es relativamente facil limitar el tipo de operaciones
que ejecuta el servidor, usando, p.e. expresiones regulares.

No se si te servirá de ayuda. Si necesitas cualquier aclaración dímelo. 
Un saludo y suerte.
--
Juan Ignacio Rodríguez de León
jileon (falta una arroba aquí) parcan.es



------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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