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(db_path[,**kw])
: db_path 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["foo"]
renvoie l’instance de la classe Table pour la table”foo”
db.keys()
renvoie les noms de tables
if "foo" in db
teste si la table “foo” existe dans la base de données
del db["foo"]
supprime la table “foo”
Pour créer une nouvelle table
table = db.create(table_name, *fields[,mode])
Les champs doivent être des tuples à 2 éléments (nom_champ, type_champ) où type_champ est un type de champ SQLite
db.create('test', ('name', 'TEXT'), ('age', 'INTEGER'), ('size', '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
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.
Pour insérer de nombreux enregistrements en une seule fois,
table.insert(list_of_values)
sera beaucoup plus rapide que
for values in list_of_values:
table.insert(values)
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
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)
Les méthodes de sélection renvoient des dictionnaires, dans lesquels les types SQLite sont convertis en types Python de cette façon
SQLite type | Python type |
---|---|
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(field_name), is_time(field_name) ou is_datetime(field_name).
db = Database('test.sqlite')
table = db['dummy']
table.is_date('birthday')
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(some_sql)
et récupérer les résultats par
results = db.cursor.fetchall()
la méthode commit() pour confirmer les changements à la base de données en fin de transaction
db.commit()