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(chemin_bdd) : chemin_bdd est le chemin de la base de données dans le système de fichiers
Les instances de Database supportent 2 méthodes :
tables() : renvoie la liste des noms de tables dans la base de données
has_table(nom_table) : renvoie un booléen qui indique s'il existe une table nom_table dans la base de données
Table(nom_table,bdd) : nom_table est le nom de la table, bdd est soit le chemin de la base de données dans le système de fichiers, soit l'instance correspondante de Database
La manipulation d'une table utilise la même syntaxe que PyDbLite :
- pour créer une table vous devez spécifier les types de champ SQLite :
INTEGER, REAL, TEXT ou BLOB :
db.create(('nom','TEXT'),('age','INTEGER'),('taille','REAL'))
- s'il faut fournir d'autres informations, passez-les comme second argument en respectant la syntaxe SQL propre à SQLite :
db.create(('recid','INTEGER PRIMARY KEY AUTOINCREMENT'),
('date','BLOB DEFAULT CURRENT_DATE'))
Pour l'insertion, la sélection, la mise à jour et la suppression, la syntaxe est la même que ci-dessus. 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
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')
L'instance de Table a un attribut cursor, ce qui permet d'exécuter des commandes SQL par db.cursor.execute(expression_sql) et récupérer le résultat par results = db.cursor.fetchall()
|