Conectando Django 1.5.3 + Python 3.3 + MySQL en Windows 8. Un arreglo y listo

Hoy quiero compartir con vosotros un tema más técnico. Igual para otros es trivial pero a mi me ha supuesto media mañana centrado es este problema.

El tema es que estoy probando alternativas para realizar una aplicación web corporativa y tenía muchas ganas de ver como funcionaba Django, así que me puse manos a la obra.

El tema no es muy complicado, yo me puse como objetivo montar algo web con Django usando base de datos MySQL, para comprobar qué se puede hacer.

MySQL

Como no tenía ningún servidor disponible y mi S.O. del trabajo es Windows 8, para instalar MySQL opté una solución WAMP, en concreto la de WampServer. Se instala fácilmente y tienes PHP, MySQL, Apache y phpadmin así que todo listo.

PHP

Bueno pues igual de sencillo, lo único es que cuando vas a la página de Django te aconseja instalar la versión 2.7 aunque también soporta experimentalmente 3.3. En Python, también considera ambas versiones como estables. Como quería probar algo que haré en el futuro, me decidí sin pensarlo por la versión 3.3, seguramente será la versión oficial en no mucho tiempo.

Django

Y por fin me instalo Django y empiezo el tutorial. Sorpresa, en caso de no utilizar SQLite, tienes que establecer un conector para la bases de datos, y aquí empieza lo complicado, no hay conector definido que vincule PHP 3.3 con Django y con MySQL. Hay algunos intentos como:

Nada, no conseguía conectar Django con MySQL. Buscando, encontré este interesante hilo sobre el mismo tema, aunque encuadrado en la próxima versión de Django. En ese hilo se plantean distintas alternativas y se concluye que el más adecuado es un plugin oficial desarrollado por MySQL, dentro de python 3 (https://pypi.python.org/pypi/mysql-connector-python/1.0.9)  o dentro de MySQL http://dev.mysql.com/doc/connector-python/en/index.html.

De forma totalmente fortuita, resulta que la versión 1.1.1 del conector, tiene un backend para Django!. Es importante saber que la versión estable del conector es la 1.0.12 y que la que tiene el porting de Django es la 1.1.1  (pestaña development release). Digo que he tenido mucha suerte porque la versión 1.1.1 que tiene el porting de Django fue puesta para probar ayer! como su desarrollador Geert Vanderkelen comunicaba en su blog.

Bueno, todo resuelto, pero no. Cuando me disponía a probar mi conector recién sacado del horno, resulta que no funcionaba, al lanzar

python manage.py syncdb

Me devolvía el error:

AttributeError: 'str' object has no attribute 'decode'

Primero hice lo más sencillo y vago: comentario al desarrollador, "pasa esto y no me funciona ¿qué puede ser?¿qué puedo hacer?". Pero reconozco que no tengo paciencia, ¡era sólo un error! y el mensaje parecía bastante explicativo. Así que abrí los archivos de código fuente en el sublime y me puse a buscar dónde estaría ese decode que no me dejaba continuar.
Encontré el problema y la solución de forma lateral en este hilo. Así que elimino la función decode y pruebo. Voilá! todo va como la seda.

Ya lo tengo todo, Django + Django backend + pequeño fix + (mysql-connector-python) + Python 3.3 + MySQL.

Como no tengo mucha idea de Python, le he mandado el fix al autor del conector para confirmar que no había destruido nada y parece que es correcto (comentarios al final).

Espero que si te has visto en el mismo caso que yo, mi experiencia te pueda ayudar.  Y también espero haberme explicado bien.

Hay días que mola mucho ser desarrollador de software.