Adaptateur MySQL
La principale différence avec le module en pur Python est la syntaxe pour identifier une base de donnéese t une table, et la nécessité de spécifier le type des champs quand on crée une base
Pour rester compatible avec le vocabulaire de MySQL, le module définit trois classes, Connection, Database et Table
Connection
Connection(hote,identifiant,mot_de_passe[,charset]) : renvoie une connection au serveur MySQL. Si le paramètre optionnel charset est fourni, les champs TEXT doivent être insérés comme chaînes Unicode, ou comme leur encodage dans ce charset ; les valeurs lues depuis la base de données seront aussi des chaînes Unicode
Les instances de Connection sont des objets similaires à des dictionaires : les clés sont les noms des bases de données et les valeurs sont les instances correspondantes de la classe Database
Par exemple :
conn.keys() renvoie la liste des noms de bases de données
conn[nom_bdd] renvoie l'instance de Database pour la base de données nom_bdd
del conn[nom_bdd] supprime la base de données nom_bdd (toutes les tables de cette base de données doivent avoir été supprimées précédemment)
Elles possèdent une autre méthode :
create(nom_bdd) : crée une base de données appelée nom_bdd et renvoie l'instance correspondante de la classe Database
Database
Les instances de Database sont des objets similaires à des dictionnaires : les clés sont les noms de tables et les valeurs sont les instances correspondantes de la classe Table class. Par exemple :
db.keys() renvoie la liste des noms de tables dans la base de données
db[nom_table] renvoie l'instance de Table appelée nom_table
del db[nom_table] : supprime la table appelée nom_table
Elles possèdent une autre méthode :
create(nom_table,*champs[,**mode]) : crée une table appelée nom_table et renvoie l'instance de la classe Table
champs sont des tuples à 2 éléments (nom_champ,type_champ) où nom_champ est le nom du champ et type_champ est un type de champ MySQL : INTEGER, REAL, DATETIME, CHAR, BLOB, etc. :
db.create('test',('nom','CHAR(20)'),('age','INTEGER'),('taille','REAL'))
S'il faut fournir des informations supplémentaires sur les types, les mettre dans le deuxième argument, en se servant de la syntaxe SQL propre à MySQL :
db.create('test',('recid','INTEGER PRIMARY KEY AUTO_INCREMENT'),
('date','TIMESTAMP DEFAULT CURRENT_TIMESTAMP'))
Le mot-clé optionnel mode spécifie ce qu'il faut faire si une table du même nom existe déjà
- mode="open" ouvre la table et ignore les définitions de champs
- mode="override" efface la table existante et en crée une nouvelle avec les définitions de champs
- si mode n'est pas spécifié et que la table existe déjà, une exception
IOError est déclenchée
Table
Pour l'insertion, la sélection, la mise à jour et la suppression, la syntaxe est la même que pour le module en pur Python
La sélection par identifiant d'enregistrement ne fonctionne que si un champ a été défini comme clé primaire ou avec le mode AUTO_INCREMENT ; les fonctions delete() et update() requièrent aussi ce champ
Pour insérer de nombreux enregistrements en une seule fois,
table.insert(liste_de_valeurs)
sera beaucoup plus rapide que
for valeurs in liste_de_valeurs:
table.insert(valeurs)
cursor et commit
Les intances de Database et Table ont toutes :
|