Vous êtes sur la page 1sur 11

Como realizar una aplicacin BBDD con MySQL/Python

Antoni Salavert (ansalavert@gmail.com)

ndice de contenido
1.Objetivo.............................................................................................................................................1 2.MySQL..............................................................................................................................................2 2.1.Instalacin Windows..................................................................................................................2 2.2.Instalacin Linux.......................................................................................................................2 2.3.Acceso al MySQL......................................................................................................................2 2.4. Copias de seguridad de MySQL...............................................................................................3 2.5.Conectar OpenOffice al MySQL...............................................................................................3 2.5.1. Usando el Connector/J .....................................................................................................4 2.5.2. Usando el Connector/ODBC en Windows .......................................................................4 2.5.3. Usando Connector/ODBC en Ubuntu ..............................................................................5 2.6. Volcado de Access a MySQL...................................................................................................6 3. Apache..............................................................................................................................................6 3.1.Windows....................................................................................................................................6 3.2.Linux..........................................................................................................................................6 3.3.Ubuntu.......................................................................................................................................7 4. Python...............................................................................................................................................7 4.1.Conversin formato fecha..........................................................................................................7 4.2.Conversin formato valor numrico..........................................................................................7 5. Interaccin Python y MySQL...........................................................................................................8 6. CGIs..................................................................................................................................................9 6.1.Windows....................................................................................................................................9 6.2.Linux........................................................................................................................................10 6.3. Funcin verificacin fecha......................................................................................................10 7.Aplicacin BIBLIOTECA...............................................................................................................10

1. Objetivo
El objetivo de este documento es explicar como desarrollar una aplicacin de base de datos SIN Microsoft Access y con programas de programacin libre. En el caso que voy a desarrollar se han empleado los siguientes productos: MySQL como base de datos relacional. Es una base de datos relacional de programacin libre y su informacin se puede encontrar en www.mysql.com Apache como servidor web. Python como lenguaje de programacin para acceder a los datos almacenados en MySQL y para la realizacin de los distintos mdulos CGI

-1-

2. MySQL
Para saber su historia y dems informacin general se puede consultar http://es.wikipedia.org/wiki/ MySQL en Internet. Tambin dispone de un manual en catellano muy completo.

2.1. Instalacin Windows


Para la instalacin se emplea la opcin 'Instalacin Tpica'. Esta instalacin es suficiente para correr esta base de datos de una base de datos de tamao medio y en una red pequea. En la configuracin del servidor, se emplear la opcin 'Standard Configuration' como se ve en la figura adjunta.

Esta configuracin permite establecer la contrasea para el ususario root, que es el usuario principal de MySQL. En caso de errores, desinstalar el MySQL, borrando a continuacin: el directorio donde se instale el programa y el directorio donde se guarden los datos, ya que este en una desinstalacin es fcil que pierda la integridad de algn fichero.

2.2. Instalacin Linux


En el manual, se explica con mucho detalle su instalacin.

2.3. Acceso al MySQL


Para verificar la correcta instalacin y el funcionamiento del MySQL, se recomienda hacerlo mediante comandos en lnea. As, empezaremos habriendo una ventana DOS con el comando cmd en Windows, o abriendo una ventana de terminal en Linux. A continuacin ejecutaremos el comando mysql -u root -p y ahora nos solicita la contrasea del usuario root, que hemos establecido en el proceso de instalacin. A partir de este instante ya podemos trabajar con esta abse de datos. Para verificar que funciona, se -2-

recomienda ejecutar el comando show databases; que nos visualiza todas las bases de datos instaladas. Por defecto existen las bases de datos mysql, test y information_schema

2.4. Copias de seguridad de MySQL


Es importante la cuestin de las copias de seguridad. Estas copias generan un fichero tipo texto mediante el uso del comando mysqldump. Este comando dispone de muchos atributos. Si se quisiese hacer una copia de todas las bases de datos, se emplara el comando: mysqldump -A > backupmysql.sql siendo backupmysql.txt el nombre del fichero de texto plano que se genera. Si solo se desea hacer copia de seguridad de una base de datos aaaa, el comando a emplear es: mysqldump databases aaaa > aaaa.sql La extensin del fichero de salida recomiendo usar sql, para recordar que para recuperar una copia de seguridad se hace ejecutando el comando source backup.sql

2.5. Conectar OpenOffice al MySQL


Una de las cosas buenas acerca de OpenOffice es su capacidad para utilizar diferentes motores de bases de datos. Slo activar el driver correcto y el OpenOffice se puede conectar prcticamente a cualquier sistema de base de datos, incluyendo MySQL. Sin embargo, decidir qu driver de base de datos de conductor utilizar y como configurar una conexin entre MySQL y OpenOffice.org puede ser un poco complicada. En primer lugar, se tiene que elegir que driver (llamado tambin conector) usar. MySQL ofrece dos conectores que permiten mover datos entre el OpenOffice y MySQL: el ODBC Driver for MySQL (Connector / ODBC) y el JDBC Driver for MySQL (Connector / J). Este ltimo es ms fcil de instalar y configurar, y puede ser utilizado de la misma forma en Linux, Windows y Mac OS X (incluso funciona con NeoOffice). Sin embargo, como el nombre sugiere, el Connector / J de Java requiere que el Java est instalado en la mquina. Si bien la cuestin de la apertura de Java ya no es un problema, an tiene que asegurarse de que el Java Runtime Environmente est instalado y aadido a OpenOffice. Otro problema ms grave con el Connector / J es su algo limitada funcionalidad cuando se utiliza con la base de datos de OpenOffice. Por ejemplo, utilizando la GUI de Base, se puede crear una clave principal, pero no se puede asignar la propiedad AUTO_INCREMENT a ella. Para evitar esta limitacin, se puede construir la base de datos ejecutando los apropiados comandos SQL usando el editor built-in de SQL (Herramientas -> SQL). Por ejemplo: `ID` INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY. Alternativamente, se puede usar herramientas de terceros como phpMyAdmin o HeidiSQL. El Connector / ODBC no tiene estas limitaciones, pero la instalacin y la configuracin es un proceso ms complicado. Adems, en Linux, el conector funciona mejor cuando la base de datos MySQL est instalada en la misma mquina. Esto se debe a que el driver espera encontrar el fichero mysql.sock en un determinado directorio y si no lo encuentra all (lo que ocurre con una base de datos remota) falla al establecer una conexin. Por supuesto se puede hacer que el driver se conecte a una base de datos remota, pero ya que este requiere un poco de latn, a menudo no vale la pena -3-

sobre todo si va a desplegar el conductor en mltiples mquinas. Como regla general, intentar primero el Connector / J primero si se est usando Linux o Mac OS X y se est cmodo utilizando SQL o puede editar la base de datos utilizando una herramienta de terceros. Si se est utilizando Windows o una mquina Linux con MySQL instalada en l, entonces se puede optar por el Connector / ODBC.

2.5.1. Usando el Connector/J


Para empezar con el JDBC Driver for MySQL (Connector / J), descargarlo del sitio web de SQL, desempaquetar el archivo descargado, y mover el fichero resultante mysql-connector-java-x-x-xbin.jar en la ubicacin deseada. A continuacin en OpenOffice, seguir los pasos siguientes: Sseleccionar Herramientas -> Opciones -> Java. Asegrarse de que el Java Runtime Environment est seleccionado y haga clic en el botn Class Path. A continuacin, haga clic en el botn Aadir Archivo y seleccionar mysql-connector-javaxxx-bin.jar. Haga clic en Aceptar para guardar los parmetros y cerrar la ventana.

A continuacin reiniciar el OpenOffice Ahora ya est listo para conectar el OpenOffice a la base de datos MySQL. En OpenOffice, seguir los pasos siguientes: Seleccionar Nuevo -> Base de datos. En el Asistente para la base de datos, seleccione Conectar a una existente opcin de base de datos. En esta caso seleccionar MySQL desde la lista desplegable, y haga clic en Siguiente. Seleccionar Conectar usando la opcin JDBC (Java Database Connectivity) y haga clic en Siguiente. Especificar el nombre de la base de datos (comptes o mysql) y la direccin del servidor (localhost) utilizando los campos correspondientes. Para asegurarse de que el driver MySQL JDBC funciona correctamente, haga clic en el botn Probar conexin. Una vez que el driver se ha cargado con xito, haga clic en Siguiente. Introduzca el nombre de usuario (root) de base de datos en el campo de nombre de usuario. Si el nombre de usuario tiene una contrasea, marcar la casilla de verificacin de contrasea (la de siempre). Para ver si todo funciona como se supone que, haga clic en el botn Probar conexin. Hacer clic en el botn Siguiente, seleccione el S, registrar la base de datos y haga clic en Finalizar. Dar a la base de datos un nombre y guardarlo.

2.5.2. Usando el Connector/ODBC en Windows


Si se est ejecutando el Open Office en Windows, descargar el ODBC Driver for MySQL (Connector / ODBC), desempaquetar el archivo descargado, y ejecute el programa de instalacin. Seguir los pasos siguientes: Ir al Panel de control> Herramientas administrativas y haga doble clic sobre las fuentes de datos (ODBC). Haga clic en la ficha DSN de usuario y haga clic en el botn Agregar. -4-

De la lista de controladores disponibles, seleccione el controlador ODBC de MySQL, y haga clic en Aceptar. Esto abre el Connector / ODBC ventana de configuracin. En la seccin de inicio de sesin, escriba la informacin requerida en los campos correspondientes. Haga clic en Probar para ver si la conexin creada funciona correctamente. A continuacin, haga clic en Aceptar para guardar los parmetros y cerrar la ventana. En OpenOffice, crear una nueva base de datos tal y como se describe anteriormente.

2.5.3. Usando Connector/ODBC en Ubuntu


Si el Connector / J trabaja para ti, ests en el negocio. Si no, intente el Connector / ODBC. El proceso para conseguir que trabaje es ligeramente diferente dependiendo de si est ejecutando Linux o Windows. Vamos a intentar Linux concretamente, Ubuntu. En primer lugar, instalar los paquetes requeridos. Lanzar Synaptic y marcar los siguientes paquetes para la instalacin: unixodbc, libmyodbc, y unixodbc-bin. Este ltimo paquete contiene las herramientas de la GUI para la creacin de una conexin ODBC a una base de datos MySQL, que se puede utilizar en lugar de jugueteando con los archivos de configuracin. Una vez que los paquetes se han instalado, iniciar la herramienta de configuracin de ODBC ejecutando el comando sudo ODBCConfig en una ventana de terminal y siga los pasos siguientes: Haga clic en la ficha System DNS y haga clic en el botn Agregar. Haga clic en Agregar de nuevo para crear un nuevo controlador ODBC. Se abrir la ventana Propiedades del controlador. Dar al nuevo controlador un nombre y una descripcin utilizando los campos correspondientes. Asumiendo que est ejecutando la versin de 32 bits de Ubuntu, especificar la ruta al archivo libmyodbc.so en el campo Driver (/ usr / lib / odbc / libmyodbc.so) y entrar en la ruta del archivo libodbcmyS.so archivo en el campo Setup (/ usr / lib / odbc / libodbcmyS.so). Ahora haga clic en Guardar y Salir para guardar los parmetros A continuacin, haga clic en Aceptar para abrir la ventana Data Source Properties. Dar para la nueva fuente de datos un nombre, entrar su descripcin. A continuacin especificar la direccin del servidor MySQL, el nombre de la base de datos, y el puerto. Haga clic en Aceptar, y que estn dispuestos a ir. Conectar el OpenOffice a la base de datos MySQL usando la conexin creada es una cuestin de elegir las opciones correctas en el Asistente para la base de datos. En OpenOffice, seguir los pasos siguientes: Seleccionar Nuevo -> Base de datos. En el Asistente para la base de datos, seleccione Conectar a la opcin existente de una base de datos Seleccionar MySQL desde la lista desplegable, y haga clic en Siguiente. Seleccione el Conectar usando la opcin ODBC (Open Database Connectivity) y haga clic en Siguiente. Apunte el Asistente para la creada conexin ODBC utilizando el botn Examinar. Haga clic en Siguiente y escriba el nombre de usuario (root) de base de datos en el campo de nombre de usuario. Si entr el nombre de usuario con una contrasea, marque la casilla de verificacin necesarios. Para ver si todo funciona como se supone, haga clic en el botn -5-

Probar conexin. Haga clic en el botn Siguiente, selecciona S, registro de la opcin de la base de datos para m, y haga clic en Finalizar. Dar a la base de datos con un nombre y guardarlo.

2.6. Volcado de Access a MySQL


Hay muchas formas de realizarlo, una es empleando la conexin ODBC, desde el mismo Access se puede exportar una tabla, pero de una en una. Otra solucin es empleando uno de los muchos programas existentes al efecto.

3. Apache
Esta aplicacin consiste en la creacin de un servidor web. Su manual contiene informacin exhaustiva de esta aplicacin.

3.1. Windows
El Apache genera los directorios siguientes: 1) El directorio htdocs donde se almacenan los archivos con extensin htm 2) El directorio cgi-bin donde se almacenan los scripts CGI 3) El directorio logs donde el archivo error.log contiene los mensajes de error generados por el Apache. En Windows, por defecto estos directorios estn bajo el directorio C:\Archivos de programa\Apache Software Foundation\Apache2.2

3.2. Linux
La instalacin se basa en lo explicado en el libro La Biblia Servidor Apache 2 de Mohammed J.Kebir. Una vez descargado la correspondiente versin en formato http...tar.gz en el directorio /usr, se ejecuta el comando tar xvzf http...tar.gz Esto conlleva la creacin del directorio http... y su contenido sirve para la instalacin del servidor Apache. A continuacin ejecutaremos el comando sudo ./configure - -prefix=/usr/local/apache dado que tenemos que ejecutarlo como administrador y se desea instalar el Apache en el directorio / usr/local/apache Ahora debemos ejecutar los comandos siguientes sudo make sudo make install Dentro del directorio /usr/local/apache se encontar 1) El directorio htdocs donde se almacenan los archivos con extensin htm 2) El directorio cgi-bin donde se almacenan los scripts CGI

-6-

3.3. Ubuntu
La instalacin del mdulo python-mysqldb se hace usando synaptic Para ver los subdirectorios por defecto, visualizar el fichero /etc/apache2/sites-available/default Verificar que tiene la lnea AddHandler cgi-script .cgi .py .pl Por defecto los archivos htm se deben almacenar en /var/www Los archivos cgi se deben almacenar en /usr/lib/cgi-bin/ Los atributos de cada cgi deben ser 0755 y la primera lnea del cgi debe ser #!/usr/bin/python El log de errores se encuentra en /var/log/apache2/error.log y verificar que existe un fichero suexec.log

4. Python
Se trata de modificar el contenido del MySQL y visualizarlo de forma e inters de los usuarios. Para ello, es necesario un lenguaje que haga de intermediario entre el Apache y el MySQL. En nuestro caso se usa Python. En este caso se ha instalado en el directorio c:/Python25 y contiene los mdulos necesarios para los scripts que se han realizado. En concreto se trata de: 1) el mdulo MySQLdb 2) el mdulo cgi 3) el mdulo cgitb; cgitb.enable() A continuacin se relacionan algunos cdigos que se han hecho a medida para las aplicaciones desarrolladas.

4.1. Conversin formato fecha


Para convertir el formato YYYY-MM-DD a DD-MM-YYYY, se utiliza el cdigo siguiente: s = row[2];sany=s[0:4];s = row[2];smes=s[5:7];s = row[2];sdia=s[8:10] fechai=sdia+'-'+smes+'-'+sany y para la conversin de DD-MM-YYYY a YYYY-MM-DD, sfeci= data['fechai'] s=sfeci;sany=s[6:11];s=sfeci;smes=s[3:5];s=sfeci;sdia=s[0:2] vfeci=sany+'-'+smes+'-'+sdia

4.2. Conversin formato valor numrico


Aunque con el comando SELECT de MySQL, se puede hacer conversiones, en Python la conversin de XXXX.XX a X.XXX,XX se hace con el cdigo siguiente: def moneda(vform1): vform1=round(vform1,2); svform1=str(vform1) -7-

punt=svform1.find('.'); deci=svform1[punt+1:punt+3] if len(deci) == 1: deci=deci+'0' partent=svform1[0:punt] partdec = '0' if len(partent) > 3: partdec=partent[len(partent)-3:len(partent)] else: partdec=partent partmil='' if len(partent) > 3: partmil=partent[0:len(partent)-3] if len(partent) > 3: resultf=partmil+'.'+partdec+','+deci else: resultf=partdec+','+deci return resultf Conversin de un valor sin decimales, como las pesetas, a formato moneda def monant(vform2): vform2=round(vform2,0); svform2=str(vform2) punt=svform2.find('.'); deci=svform2[punt+1:punt+3] partent=svform2[0:punt] partdec='' partmil='' partcmil='' if len(partent) > 6 : partcmil = partent[0:len(partent)-6] partmil = partent[len(partent)-6:len(partent)-3] partdec = partent[len(partent) - 3:len(partent)] resultf=partcmil+'.'+partmil+'.'+partdec if len(partent) > 3 and len(partent) < 7: partmil = partent[0:len(partent)-3] partdec = partent[len(partent)-3:len(partent)] resultf=partmil+'.'+partdec if len(partent) < 3: partdec=partent[0:len(partent)-3] resultf=partdec return resultf

5. Interaccin Python y MySQL


El mdulo de acceso a MySQL desde Python requiere la instalacin correspondiente, ejecutando el programa MySQL-python-1.2.2.win32-py2.5 Consta de las partes siguientes: La activacin de la conexin con el servidor MySQL El cierre de la conexin La ejecucin de los comandos SQL. Es importante hacerlo con cursor.execute (sqlcmd), ya que de esta forma evitamos errores de argumentos en cuanto a su cantidad. -8-

El comando INSERT El comando DELETE el comando UPDATE En el caso de SELECT, las DB-API suministran un par de mtodos para extraer las filas: fetchone() y fetchall(). El mtodo. fetchone( ) devuelve la fila siguiente como una secuencia o None cuando no hay ms filas. Pero hay un error en Python que hace no recoja los campos del primer registro. Por esta razn se debe usar el otro mtodo fetchall(). El mtodo fetchall( ) devuelve el resultado completo como una secuencia de secuencias. Se puede iterar a travs de la secuencia de acceso a las filas: rows = cursor.fetchall ( ) for row in rows: print "id: %s, name: %s, cats: %s" % (row[0], row[1], row[2])

6. CGIs
6.1. Windows
Dado que el lenguaje Python se ha instalado aparte del Apache, es decir, Python no est integrado en l, hace que la primera lnea del scripts sea #!c:\Python25\python.exe La segunda lnea debe ser ## -*- coding: latin-1 -*para que el propio CGI visualice de forma correcta todos aquellos caracteres especiales en cuanto al idioma que no forma parte del idioma ingls. El script CGI recupera las variables y sus contenidos mediante el objeto diccionario cgi.FieldStorage(). Sin embargo la forma de extraer las variables y sus contenidos se hace usando el cdigo siguiente: theform = cgi.FieldStorage() data = {} for field in theform.keys(): if type(theform[field]) == type([]): if not nolist: data[field] = theform.getlist(field) else: data[field] = theform.getfirst(field) else: data[field] = theform[field].value Cabe resaltar que probablemente a errores contenidos en la librera cgi, no funciona el cdigo siguiente: datos = cgi.FieldStorage() vbcodi = datos["bcodi"].value vopcion = datos["opcion"].value -9-

6.2. Linux
En Linux, la llamada al Python se debe hacer con /usr/bin/python

6.3. Funcin verificacin fecha


Esta funcin verifica que la fecha sea correcta en cuanto al formato XX-XX-XXXX Por ello busca si hay un primer guin (posci1) y a continuacin un segundo guin (posic2). Luego verifica si el da, el mes y el ao son numricos. La variable retorno se inicializa con 0, y si encuentra algn error la pone a 1. function verifdate() { var retorn = 0" var str1=document.alta.fecha.value var posic1 = str1.search(/-/) if (posic1 == -1) {retorn=1} var sdia = str1.substr(0,posic1) if (isNaN(sdia)) {retorn=1} var str2 = str1.substr(posic1+1) var posic2 = str2.search(/-/) if (posic2 == -1) {retorn=1} var smes = str2.substr(0,posic2) if (isNaN(smes)) {retorn=1} var sany = str2.substr(posic2+1) if (isNaN(sany)) {retorn=1} if (retorn == 1) {alert ('Error en la data')} else {alert ('CORRECTE: '+sdia+'-'+smes+'-'+sany);} }

7. Aplicacin BIBLIOTECA
Esta aplicacin consiste en almacenar la informacin de libros, revistas, etc. en una base de datos. En este caso concreto, lo primero que se debe hacer es disear la base de datos con los campos deseados. En nuestro caso, los campos son Nombre Ttulo Autor Materia Editorial ISBN Descripcin - 10 Descripcin Nombre completo del documento en cuestin Nombre del autor o autores

Fecha publicacin Palabras clave Topografa Para facilitar determinadas bsquedas Para determinar su ubicacin fsica

Ahora ya podemos acceder al MySQL y dar de alta esta base de datos en la misma. Para ello primero debemos generar una base de datos nueva, que le hemos llamado documentacio. Su creacin se hace usando el comando CREATE DATABASE A continuacin dentro de esta base de datos, se ha creado la nica tabla a emplear llamada biblio, y se genera mediante el comando CREATE TABLE. En este caso, se deben generar todos y cada uno de los campos antes mencionados. El tipo de campo para todos ellos es VARCHAR y su longitud depende del diseo. Conviene no decidirse por grandes longitudes, ya que se despilfarrara espacio de memoria, y se penalizara los tiempos de respuesta. Siempre es posible aumentar la longitud de algn campo mediante el uso de comandos en lnea sin prdida del contenido. En las reducciones de la longitud del campo, hay riesgo de prdida de informacin.

- 11 -

Vous aimerez peut-être aussi