English

Adaptateur SQLite

L'adaptateur utilise le module sqlite :

    from pydblite import 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 sqlite 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)type_champ est un type de champ SQLite : INTEGER, REAL, TEXT ou 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 SQLiteType Python
NULLNone
TEXTunicode
BLOBstr
INTEGERint
REALfloat

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, commit et close

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
L'instance de Database possède une méthode close() pour fermer la base de données.