English

## Adaptateur SQLite La seule différence avec le module en pur Python est la syntaxe pour identifier une table et la nécessité de spécifier le type des champs quand on crée une base Pour rester cohérent avec le vocabulaire SQLite, le module définit deux classes, `Database` et `Table` ### Database `Database(chemin_bdd[,**kw])` : chemin_bdd est le chemin de la base de données dans le système de fichiers. Les arguments par mots-clés sont les mêmes que pour la méthode `connect()` du module Python pour SQLite Les instances de `Database` sont des objets similaires à des dictionnaires, où les clés sont les noms des tables et les valeurs sont des instances de la classe `Table` db["test"] renvoie l'instance de la classe `Table` pour la table "test" db.keys() renvoie les noms de tables if "test" in db teste si la table "test" existe dans la base de données del db["test"] supprime la table "test" Pour créer une nouvelle table : table = db.create(nom_table,*champs[,mode]) Les champs doivent être des tuples à 2 éléments (nom_champ, type_champ) où type_champ est un type de champ SQLite : `INTEGER, REAL, TEXT` oo `BLOB` : db.create('test',('nom','TEXT'),('age','INTEGER'),('taille','REAL')) S'il faut fournir d'autres informations, les mettre dans le deuxième argument, avec la syntaxe SQL propre à SQLite : db.create('test',('date','BLOB DEFAULT CURRENT_DATE')) 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 seule différence est qu'on ne peut pas utiliser la méthode `drop_field()`, parce que la suppression de champs n'est pas supportée par SQLite 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) La conversion entre les types Python et les types de champs SQLite reproduit le comportement du module Python pour SQLite : les instances de `datetime.date` et de `datetime.datetime` sont stockées comme des dates ou des dates-heures au format ISO Les méthodes de sélection renvoient des dictionnaires, dans lesquels les types SQLite sont convertis en types Python de cette façon :
Type SQLite | Type Python
--- | ---
NULL | None
TEXT | unicode
BLOB | str
INTEGER | int
REAL | float
Si vous voulez que des champs soient renvoyés comme instances de `datetime.date`, `datetime.time` ou `datetime.datetime`, vous devez le spécifier quand vous créez ou ouvrez la table, en utilisant les méthodes `is_date(nom_champ)`, `is_time(nom_champ)` ou `is_datetime(nom_champ)` : db = Database('test.sqlite') table = Table('truc',db) table.is_date('anniv') ### `cursor` et `commit` Les intances de `Database` et `Table` ont toutes : l'attribut `cursor`, le curseur de la connection SQLite. 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