bibigeek.com  Tu blog de Programación Geek: Java, php, J2EE... y mucho más

Hola a tod@s de nuevo,

Al fiiinnnnn, por dos razones importantes:

  • Una, porque hacia tiempo que no escribía (y mirad que tengo temas, pero también mucho trabajo…)
  • Y dos… ya he podido configurar Django con MySQL. Se me resistía, una y otra vez, todo porque me faltaba instalar python-mysqldb, de lo contario siempre me daba errores.

Voy a dividir la instalación en puntos para que se pueda leer, comprender y que el seguimiento sea lo más simple posible. Empecemos.

Requisitos necesarios para instalar Django con MySQL

  • Sistema Operativo Linux (testeado en Ubuntu Karmic Koala), para los Maqueros como en mi caso tendremos que esperar a que pueda hacer pruebas :P
  • Versión de Django 1.1.1  instalado (esper que con versiones anteriores o posteriores no tiene porque ser diferente)
  • Motor de Base de Datos MySQL (versión, yo tengo la 5.1.37) tanto el servidor como el cliente.
  • (Opcional) Instalación de MySQL Administrator y MySQL Query Browser
  • Paquete python-mysqldb (pero se explicará con más detalle)

Instalación MySQL Administrator y MySQL Query Browser

1- Primero buscamos el paquete mysql-admin con el siguiente comando:


sudo aptitude search mysql-admin

2- La salida que obtenemos es:


bibigeek@macbookpro-bibigeek:~/PythonProjects$ sudo aptitude search mysql-admin
pB  mysql-admin               - Herramienta gráfica para una administración sencilla de MySQL

3- Ahora ya ponemos a instalar el paquete mysql-admin con el comando:


sudo aptitude install mysql-admin

4- La salida de la instalación es (importante fijaros en el texto en negrita y subrayado):


Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
libgnomecups1.0-1{a} libgnomeprint2.2-0{a} libgnomeprint2.2-data{a} libgnomeprintui2.2-0{a} libgnomeprintui2.2-common{a}
libgtkhtml3.8-15{a} libmysqlclient15off{a} mysql-admin mysql-gui-tools-common{a} mysql-query-browser{a} 
0 paquetes actualizados, 10 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 0B/6212kB de archivos. Después de desempaquetar se usarán 22,3MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho

Seleccionando el paquete libgnomecups1.0-1 previamente no seleccionado.

...

Configurando mysql-gui-tools-common (5.0r12-1ubuntu2) ...
Configurando mysql-admin (5.0r12-1ubuntu2) ...

Configurando mysql-query-browser (5.0r12-1ubuntu2) ...

Procesando disparadores para libc-bin ...
ldconfig deferred processing now taking place
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho

5- Pantallazo de donde podemos encontrar los programas instalados:

Creación del Proyecto testProject

1- Ahora creamos el proyecto Django, un proyecto de prueba. Lo denominaré “testProject”, ejecutamos el siguiente comando:


django-admin.py startproject testProject

2- Configuraremos el proyecto Django para que funcione con el motor de BD MySQL. Alerta, estoy suponiendo que el usuario test y la Base de Datos testDB está creado. Os adjunto los valores a modificar en el fichero settings.py y también adjunto un pantallazo:


12 DATABASE_ENGINE = 'mysql'
13 DATABASE_NAME = 'testDB'
14 DATABASE_OPTIONS ={"init_command":"SET storage_engine=INNODB"}
15 DATABASE_USER = 'test'
16 DATABASE_PASSWORD = 'test'
17 DATABASE_HOST = 'localhost'
18 DATABASE_PORT = '3306'


IMPORTANTE: fijaos que he puesto una opción que no viene por defecto el fichero settings.py, que es el DATABASE_OPTIONS. Esta opción es utilizada para especificarle a Django que las tablas que tienen que crear en MySQL son de la tecnología INNODB.

3- Ahora ejecutamos el comando “syncdb” para crear la estructura de Base de Datos para Django. Veréis por los siguiente pantallazos y textos expuestos, que no funciona y nos mostrara un error. Veamosló todo:


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 195, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 221, in execute
self.validate()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 249, in validate
num_errors = get_validation_errors(s, app)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/validation.py", line 22, in get_validation_errors
from django.db import models, connection
File "/usr/local/lib/python2.6/dist-packages/django/db/__init__.py", line 41, in <module>
backend = load_backend(settings.DATABASE_ENGINE)
File "/usr/local/lib/python2.6/dist-packages/django/db/__init__.py", line 17, in load_backend
return import_module('.base', 'django.db.backends.%s' % backend_name)
File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/mysql/base.py", line 13, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Instalación del paquete Python-mysqldb

Como habréis notado y visto, cuando hemos ejecutado el syncdb nos ha proporcionado una serie de errores. Esto lo solucionaremos con la instalación del paquete “python-mysqldb”. Para instalarlo podemos ejecutar los siguientes comandos y os tendría que aparecer en la salida algo similar a esto:


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ sudo aptitude search python-mysql
[sudo] password for bibigeek:
p   python-mysqldb                       - Una interfaz Python para MySQL
p   python-mysqldb-dbg              - Una interfaz Python para MySQL (extensión de depuración)

bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ sudo aptitude install python-mysqldb
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
python-mysqldb
0 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 0B/98,5kB de archivos. Después de desempaquetar se usarán 352kB.
Escribiendo información de estado extendido... Hecho
Seleccionando el paquete python-mysqldb previamente no seleccionado.
(Leyendo la base de datos ...  00%
153203 ficheros y directorios instalados actualmente.)
Desempaquetando python-mysqldb (de .../python-mysqldb_1.2.2-10_i386.deb) ...
Configurando python-mysqldb (1.2.2-10) ...
Procesando disparadores para python-support ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho

Resultado final de Django con MySQL

1- Si en estos momentos ejecutamos el syncdb tendremos el siguiente resultado (texto y pantallazo):


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'bibigeek'): demo
E-mail address: bibigeek@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model

Para que podáis comprobar que esta se ha echo realidad (es que al fin lo he podido hacer funcionar…) os ajunto un pantallazo del MySQL Administrator con el diseño del schema testDB, veamosló:

Como habréis visto en la imagen, las tablas creadas son INNODB, importante :P

Espero que os haya servido de algo y suerte!!!!!

4 Comentarios

  1. aaloy on Febrero 27, 2010 10:20 am

    Una de las mejores cosas que tienen Python y Django son mensajes de error bastante informativos. Uno de los “trucos” más importantes que hay que aprender es que ante problemas primero miramos los mensajes de error de la consola. :)

    Un tutorial paso a paso muy bien explicado. Enhorabuena!

  2. bibigeek on Febrero 27, 2010 10:35 am

    Muchas gracias por el comentario,
    Como puedes ver esto es un problema de base… antes de consultar el error empiezo a instalar porquería. La verdad es que leyendo tu comentario me doy cuenta de que el nombre “mysqldb” es el nombre del paquete :P

    Cada día se aprenden nuevas cosas e importante, hay que cambiar de filosifía :P

    Muchas gracias por el comentario, tengo que cambiar el chip!

  3. uruguayo on Abril 14, 2010 11:27 pm

    Ufff!!, muchas gracias, mejor explicado que la documentacion oficial (que te deja tirado en este caso) y ni que hablar que los grupos de Django (preguntas sueltas a granel), viejo, tendrias que trabajar haciendo la documentacion….
    Muy agradecido, estoy en el trabajo y ya hace como tres horas que estoy.. perdon, ESTABA con el dichoso mysqldb, buen trabajo!!!!

  4. tatianaJ on Julio 22, 2010 6:24 pm

    Muchas gracias, super bien explicado!

Escribe un Comentario