SQLite
SQLite a été conçu pour être intégré dans le programme même. Pour des projets plus ambitieux /
projets web le choix de MySQL serait plus judicieux.
Utiliser le module SQLite
Pour importer le module SQLite:
# coding: utf-8
import sqlite3
Créer une base de données avec SQLite
La aussi pour créer une base de données avec SQLite, rien de plus simple:
conn = sqlite3.connect('ma_base.db')
Lorsque vous executerez votre programme vous remarquerez que si la base n'existe pas encore, un
fichier sera crée dans le dossier de votre programme. Et si celui-ci existe déjà il sera réutilisé. Vous
pouvez bien évidemment choisir l'emplacement de votre base de données en renseignant un path,
exemple: "/data/ma_base.db" . Il vous faudra cependant vérifier que le dossier existe avant de
l'utiliser.
Il est également possible de travailler avec une base de données de manière temporaire:
conn = sqlite3.connect(':memory:')
Lorsque le travail que vous attendiez est terminé, pensez à fermer la connexion vers la base:
db.close()
Créer une table avec SQLite
Voici un exemple de création de table:
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT,
age INTERGER
)
""")
conn.commit()
Supprimer une table avec SQLite:
cursor = conn.cursor()
cursor.execute("""
DROP TABLE users
""")
conn.commit()
Insérer des données
Il existe plusieurs manière d'insérer des données, la plus simple étant celle-ci:
cursor.execute("""
INSERT INTO users(name, age) VALUES(?, ?)""", ("olivier", 30))
Vous pouvez passer par un dictionnaire:
data = {"name" : "olivier", "age" : 30}
cursor.execute("""
INSERT INTO users(name, age) VALUES(:name, :age)""", data)
Vous pouvez récupérer l'id de la ligne que vous venez d'insérer de cette manière:
id = cursor.lastrowid
print('dernier id: %d' % id)
Il est également possible de faire plusieurs insert en une seule fois avec la fonction executemany :
users = []
users.append(("olivier", 30))
users.append(("jean-louis", 90))
cursor.executemany("""
INSERT INTO users(name, age) VALUES(?, ?)""", users)
Récupérer des données
Vous pouvez récupérer la première ligne correspondant à votre recherche à l'aide de la fonction
fetchone .
cursor.execute("""SELECT name, age FROM users""")
user1 = cursor.fetchone()
print(user1)
Le résultat est un tuple:
('olivier', 30)
Vous pouvez récupérer plusieurs données de la même recherche en utilisant la fonction fetchall() .
cursor.execute("""SELECT id, name, age FROM users""")
rows = cursor.fetchall()
for row in rows:
print('{0} : {1} - {2}'.format(row[0], row[1], row[2]))
L'objet curseur fonctionne comme un itérateur, invoquant la méthode fetchall() automatiquement:
cursor.execute("""SELECT id, name, age FROM users""")
for row in cursor:
print('{0} : {1}, {2}'.format(row[0], row[1], row[2]))
Pour la recherche spécifique,on utilise la même logique vu précédemment:
id = 2
cursor.execute("""SELECT id, name FROM users WHERE id=?""", (id,))
response = cursor.fetchone()
Modifier des entrées
Pour modifier des entrées:
cursor.execute("""UPDATE users SET age = ? WHERE id = 2""", (31,))
SQLite transactions : rollback
Pour revenir au dernier commit , utilisez la méthode rollback .
conn.rollback()
Gestion des erreurs
Il est recommandé de toujours encadrer les opérations sur des bases de données et d'anticiper des
erreurs:
import sqlite3
try:
conn = sqlite3.connect('data/users.db')
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE users(
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT,
age INTERGER
)
""")
conn.commit()
except sqlite3.OperationalError:
print('Erreur la table existe déjà')
except Exception as e:
print("Erreur")
conn.rollback()
# raise e
finally:
conn.close()
Base de
COMMIT ROLLBACK
comparaison
COMMIT valide les
ROLLBACK efface les modifications apportées
De base modifications apportées par la
par la transaction en cours.
transaction en cours.
Une fois que ROLLBACK est exécuté, la base
Après exécution de l'instruction
de données atteint son état précédent, c'est-à-
Effet COMMIT, la transaction ne peut
dire avant l'exécution de la première instruction
pas être ROLLBACK.
de la transaction.
COMMIT se produit lorsque la
ROLLBACK se produit lorsque la transaction
Occurrence transaction est exécutée avec
est abandonnée au milieu de l'exécution.
succès.
Syntaxe COMMIT; ROLLBACK;