English

## 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 : l'attribut `cursor`, le curseur de la connection MySQL. On peut donc exécuter des expressions SQL par db.cursor.execute(expr_sql) et récupérer les résultats par resultats = db.cursor.fetchall() la méthode `commit()` pour confirmer les changements à la base de données en fin de transaction