SQLite3 – travail intégré avec SQLite en Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à SQLite et au module sqlite3

SQLite est un système de gestion de base de données relationnelle compact qui ne nécessite pas l'installation d'un serveur dédié, ce qui le rend idéal pour le développement de projets petits et moyens. En Python, la prise en charge de SQLite est assurée par le module intégré sqlite3, permettant de travailler avec des bases de données sans installer de bibliothèques supplémentaires.

Le module sqlite3 transforme la création et l'utilisation de bases de données en un processus aussi simple que la manipulation de fichiers classiques. Cette solution est particulièrement précieuse pour le prototypage, les systèmes embarqués, les applications de bureau et les projets éducatifs.

Installation et compatibilité

Le module sqlite3 est inclus dans la bibliothèque standard de Python depuis la version 2.5 et est disponible sans installation supplémentaire. Il assure une compatibilité totale avec les systèmes d'exploitation Windows, macOS et Linux, offrant une interface pour travailler avec SQLite version 3.

import sqlite3

Connexion à la base de données et création de la liaison

Création d'une base de données fichier

conn = sqlite3.connect('ma_base.db')

Lors de l'exécution de cette commande, la base de données est automatiquement créée si le fichier spécifié n'existe pas.

Création d'une base de données en mémoire

conn = sqlite3.connect(':memory:')

Cette option est particulièrement pratique pour les tests et les opérations temporaires.

Paramètres supplémentaires de connexion

conn = sqlite3.connect('database.db', 
                      check_same_thread=False,
                      detect_types=sqlite3.PARSE_DECLTYPES)

Création de tables et gestion du schéma de données

Création de tables

cursor = conn.cursor()
cursor.execute('''
    CREATE TABLE utilisateurs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT NOT NULL,
        age INTEGER,
        email TEXT UNIQUE,
        date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
''')
conn.commit()

Types de données dans SQLite

SQLite prend en charge cinq types de données principaux :

  • INTEGER - nombres entiers
  • REAL - nombres à virgule flottante
  • TEXT - chaînes de caractères
  • BLOB - données binaires
  • NULL - absence de valeur

SQLite utilise un typage dynamique, ce qui offre de la flexibilité mais nécessite une attention particulière lors de la manipulation des données.

Opérations CRUD (Create, Read, Update, Delete)

Insertion de données

# Insertion d'un seul enregistrement
cursor.execute("INSERT INTO utilisateurs (nom, age, email) VALUES (?, ?, ?)", 
               ("Jean Dupont", 30, "jean@exemple.com"))

# Insertion de plusieurs enregistrements
donnees_utilisateurs = [
    ("Marie Martin", 25, "marie@exemple.com"),
    ("Pierre Lefevre", 35, "pierre@exemple.com"),
    ("Anne Dubois", 28, "anne@exemple.com")
]
cursor.executemany("INSERT INTO utilisateurs (nom, age, email) VALUES (?, ?, ?)", donnees_utilisateurs)
conn.commit()

Sélection de données

# Sélection de tous les enregistrements
cursor.execute("SELECT * FROM utilisateurs")
tous_utilisateurs = cursor.fetchall()

# Sélection avec condition
cursor.execute("SELECT nom, age FROM utilisateurs WHERE age > ?", (25,))
utilisateurs_adultes = cursor.fetchall()

# Sélection avec tri
cursor.execute("SELECT * FROM utilisateurs ORDER BY age DESC")
utilisateurs_tries = cursor.fetchall()

Mise à jour de données

cursor.execute("UPDATE utilisateurs SET age = ? WHERE nom = ?", (31, "Jean Dupont"))
conn.commit()

# Obtention du nombre de lignes modifiées
print(f"Lignes mises à jour : {cursor.rowcount}")

Suppression de données

cursor.execute("DELETE FROM utilisateurs WHERE nom = ?", ("Anne Dubois",))
conn.commit()
print(f"Lignes supprimées : {cursor.rowcount}")

Utilisation des transactions

Les transactions garantissent l'intégrité des données. Utilisez commit() pour valider les modifications et rollback() pour les annuler.

try:
    cursor.execute("INSERT INTO utilisateurs (nom, age) VALUES ('Test', 20)")
    conn.commit()
except Exception as e:
    conn.rollback()
    print(f"Erreur : {e}")

Intégration avec Pandas

Combinez SQLite et Pandas pour une analyse de données avancée :

import pandas as pd

# Lecture d'une table SQLite dans un DataFrame
df = pd.read_sql_query("SELECT * FROM utilisateurs", conn)
print(df.head())

# Écriture d'un DataFrame dans SQLite
df.to_sql('nouvelle_table', conn, if_exists='replace', index=False)

Optimisation et bonnes pratiques

  • Utilisez des index pour accélérer les requêtes : CREATE INDEX idx_nom ON utilisateurs(nom);
  • Fermez toujours la connexion avec conn.close()
  • Utilisez des requêtes paramétrées pour éviter les injections SQL
  • Activez le mode WAL pour de meilleures performances en écriture

Sauvegarde et restauration

# Sauvegarde
conn_backup = sqlite3.connect('sauvegarde.db')
conn.backup(conn_backup)
conn_backup.close()

# Restauration
conn_restore = sqlite3.connect('sauvegarde.db')
conn_restore.backup(conn)
conn_restore.close()

Recommendations