Python + SQLite : persister ses données sans serveur
Table des matières
Pourquoi SQLite ?
Quand on développe une app Python qui doit stocker des données, SQLite est souvent la meilleure option pour démarrer. Pas de serveur à installer, tout tient dans un seul fichier, et les performances sont excellentes pour la plupart des usages.
Premiers pas
import sqlite3
conn = sqlite3.connect('ma_base.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS projets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom TEXT NOT NULL,
statut TEXT DEFAULT 'en_cours',
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
Opérations CRUD
# INSERT
cursor.execute('INSERT INTO projets (nom, statut) VALUES (?, ?)', ('UPplanning', 'terminé'))
conn.commit()
# SELECT
cursor.execute('SELECT * FROM projets WHERE statut = ?', ('terminé',))
rows = cursor.fetchall()
for row in rows:
print(row)
# UPDATE
cursor.execute('UPDATE projets SET statut = ? WHERE id = ?', ('archivé', 1))
conn.commit()
# DELETE
cursor.execute('DELETE FROM projets WHERE id = ?', (1,))
conn.commit()
Avec un context manager
with sqlite3.connect('ma_base.db') as conn:
conn.row_factory = sqlite3.Row # accès par nom de colonne
cursor = conn.cursor()
cursor.execute('SELECT * FROM projets')
for row in cursor.fetchall():
print(row['nom'], row['statut'])
row_factory = sqlite3.Row permet d'accéder aux colonnes par leur nom plutôt que par index. Beaucoup plus lisible.Cas d'usage réels
SQLite est parfait pour les trackers (Nuzlock tracker, outil Sabacc), les outils desktop en PyQt, les logs d'application ou n'importe quel projet où une base embarquée suffit. Pour une appli web avec beaucoup de concurrence, PostgreSQL sera plus adapté.