Vous êtes ici : Accueil Tutoriels Le point sur Python3 + MySQL

Le point sur Python3 + MySQL

Lorsque l'on démarre un projet, il est tentant de vouloir utiliser directement Python3. Ses avancées sont tellement importantes qu'il devient assez difficile de s'en passer et plutôt fastidieux de revenir à Python 2 une fois que l'on a goûté à la branche 3. Seulement, il est important de s'assurer de travailler avec des modules déjà portés. Malheureusement, beaucoup de projets utilisent MySQL avec un connecteur python-mysql et le module de référence qui est MySQLdb n'est pas encore porté. Il faut alors chercher les alternatives et cela peut devenir rapidement compliqué. Si vous êtes dans ce cas, vous trouverez ici la meilleure solution - au moment où ce tutoriel est écrit - à mettre en place.

En fouillant un peu sur le net

Lorsque l'on cherche spécifiquement des solutions pour utiliser MySQL avec SQLalchemy, on finit par tomber inévitablement sur la page de référence sur le sujet : Ce paragraphe et les suivants (OurSQL Notes, pymysql Notes, MySQL-Connector Notes) détaillent rapidement les pratiques pour utiliser les alternatives.

Les deux alternatives à MySQLdb que sont pymysql et MySQL-Connector sont les plus simples d'installation :

sudo easy_install3 pymysql mysql_connector

Mais manque de chance, ces deux solutions ne sont pas abouties. Leur utilisation génère des erreurs, en particulier avec SQLAlchemy. Il faut donc en passer par OurSQL.

Installation

Un préalable est de s'assurer que l'on dispose du fichier mysql.h et par conséquent, sur les systèmes d'exploitation basées sur debian, de s'assurer que le paquet libmysqlclient-dev est bien installé.

Il est nécessaire d'aller fouiller un peu sur le site du projet pour trouver la version dédiée à Python3 : ici.

Il faut ensuite décompresser l'archive dans un répertoire de travail temporaire et s'y rendre à l'aide d'un terminal en administrateur ou via sudo et faire simplement :

python3 setup.py install

A ce moment là, si l'on ouvre une console Python3 et que l'on tape import oursql, on ne doit pas avoir de message d'erreurs.

SQLAlchemy

On peut alors reprendre la démarche exposée dans le livre Python : les fondamentaux du langage. Il suffit alors de configurer SQLAlchemy comme suit :

from sqlalchemy import MetaData
from sqlalchemy.schema import Table
conn = {
'type': 'mysql',
'adap': 'oursql',
'host': 'localhost',
'port': '3306',
'user': 'bduser',
'pass': 'secret',
'name': 'dbname',
}
url = '%(type)s+%(adap)s://%(user)s:%(pass)s@%(host)s:%(port)s/%(name)s' % conn

metadata = MetaData(url)
table = Table('table_name', metadata, autoload=True)from sqlalchemy.schema import Table
print(table.c)

Conclusion

OurSQL est une solution qui est, une fois que l'on a trouvé la procédure, assez facile à mettre en place. Elle permet d'utiliser MySQL de la même manière que MySQLdb sous Python2, qui est le connecteur de référence.

En ce qui concerne les performances, la solution n'est pas forcément parfaite, mais largement suffisante pour tous les besoins. Lorsque le module MySQLdb sera enfin livré, il n'y aura qu'un seul paramètre de connection à changer (adap) pour effectuer la transition.

Dans l'intervale, on se sera évité le développement en Python 2 et la réécriture en Python3.

Spinner