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