0% ont trouvé ce document utile (0 vote)
18 vues30 pages

SQL avec SQLite3 en Python : Guide Complet

Ce document présente l'utilisation de SQL avec SQLite3 en Python, couvrant les opérations de création, insertion, lecture, mise à jour et suppression de données. Il explique également les transactions, les contraintes, les types de données et les bonnes pratiques pour éviter les erreurs courantes. Des exemples concrets et des scripts de bout en bout sont fournis pour illustrer chaque concept.

Transféré par

Said Houtate
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
18 vues30 pages

SQL avec SQLite3 en Python : Guide Complet

Ce document présente l'utilisation de SQL avec SQLite3 en Python, couvrant les opérations de création, insertion, lecture, mise à jour et suppression de données. Il explique également les transactions, les contraintes, les types de données et les bonnes pratiques pour éviter les erreurs courantes. Des exemples concrets et des scripts de bout en bout sont fournis pour illustrer chaque concept.

Transféré par

Said Houtate
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Langage SQL avec SQLite3 sous Python

Créer, insérer, lire, mettre à jour, supprimer


Transactions et commit
Exemples concrets
Objectifs
• Comprendre SQL avec SQLite
• Utiliser le module sqlite3 en Python
• Maîtriser CREATE, INSERT, SELECT, UPDATE, DELETE, COMMIT
Prérequis
• Python 3
• sqlite3 intégré à Python
• Éditeur de code

• python -V
• python -c "import sqlite3;
print(sqlite3.sqlite_version)"
Créer une base de données
• SQLite stocke un fichier .db
• La base est créée à la connexion si absente

• python
• import sqlite3
• conn = [Link]("[Link]")
• cur = [Link]()
Schéma d'exemple
• Table clients id, nom, email
• Clé primaire sur id
CREATE TABLE – syntaxe
• CREATE TABLE nom_table (...)
• Types SQLite INTEGER, TEXT, REAL, BLOB

• sql
• CREATE TABLE clients (
• id INTEGER PRIMARY KEY,
• nom TEXT NOT NULL,
• email TEXT UNIQUE
• );
CREATE TABLE en Python
• Exécuter du SQL avec [Link]
• Valider avec commit

• python
• [Link]("""
• CREATE TABLE IF NOT EXISTS clients (
• id INTEGER PRIMARY KEY,
• nom TEXT NOT NULL,
• email TEXT UNIQUE
• )
• """)
• [Link]()
INSERT INTO – syntaxe
• INSERT INTO table (colonnes) VALUES (valeurs)
• Toujours paramétrer les valeurs

• sql
• INSERT INTO clients (nom, email) VALUES ('Ali',
'ali@[Link]');
INSERT paramétré en Python
• Utiliser ? pour liaisons
• Évite l'injection SQL

• python
• [Link]("INSERT INTO clients (nom, email) VALUES (?,
?)", ("Ali", "ali@[Link]"))
• [Link]()
INSERT multiple
• executemany pour lots
• Gain de temps

• python
• rows = [("Sara", "sara@[Link]"), ("Noah",
"noah@[Link]")]
• [Link]("INSERT INTO clients (nom, email) VALUES
(?, ?)", rows)
• [Link]()
SELECT – syntaxe
• SELECT colonnes FROM table
• Filtrer avec WHERE, trier avec ORDER BY

• sql
• SELECT id, nom, email FROM clients;
SELECT en Python
• fetchone, fetchall
• Itérer sur le curseur

• python
• [Link]("SELECT id, nom, email FROM clients")
• for row in [Link]():
• print(row)
WHERE – filtres
• Opérateurs =, <, >, LIKE, IN
• Combiner avec AND, OR

• sql
• SELECT * FROM clients WHERE email LIKE '%@[Link]';
ORDER BY et LIMIT
• ORDER BY colonne ASC|DESC
• Limiter le nombre de lignes

• sql
• SELECT * FROM clients ORDER BY nom ASC LIMIT 10;
Paramètres dans SELECT
• Toujours passer les valeurs séparément
• Placeholders ?

• python
• domaine = "%@[Link]"
• [Link]("SELECT * FROM clients WHERE email LIKE ?",
(domaine,))
• print([Link]())
UPDATE – syntaxe
• UPDATE table SET colonne = valeur WHERE condition
• Toujours filtrer

• sql
• UPDATE clients SET email = 'ali@[Link]' WHERE id = 1;
UPDATE en Python
• Paramétrer et valider
• rowcount donne le nombre de lignes

• python
• [Link]("UPDATE clients SET email = ? WHERE id = ?",
("ali@[Link]", 1))
• print([Link])
• [Link]()
DELETE – syntaxe
• DELETE FROM table WHERE condition
• Sans WHERE supprime tout

• sql
• DELETE FROM clients WHERE id = 2;
DELETE en Python
• Paramétrer la condition
• Valider avec commit

• python
• [Link]("DELETE FROM clients WHERE email = ?",
("noah@[Link]",))
• [Link]()
Transactions et COMMIT
• Une transaction groupe plusieurs opérations
• COMMIT enregistre, ROLLBACK annule

• python
• try:
• [Link]("INSERT INTO clients (nom) VALUES (?)",
("Test",))
• [Link]("UPDATE clients SET nom = ? WHERE id =
?", ("Test2", 1))
• [Link]()
• except Exception:
• [Link]()
• raise
Mode autocommit
• Isolation par défaut DEFERRED
• Utiliser [Link] ou context manager

• python
• with conn:
• [Link]("INSERT INTO clients (nom) VALUES (?)",
("Auto",))
Contraintes utiles
• PRIMARY KEY, UNIQUE, NOT NULL
• CHECK pour valider les données

• sql
• CREATE TABLE emails (
• id INTEGER PRIMARY KEY,
• adresse TEXT NOT NULL UNIQUE CHECK(instr(adresse, '@')
> 1)
• );
Types SQLite
• Affinités: INTEGER, TEXT, REAL, BLOB, NUMERIC
• NULL autorisé sauf NOT NULL
Index
• Accélère SELECT avec WHERE
• Coût sur INSERT, UPDATE, DELETE

• sql
• CREATE INDEX idx_clients_email ON clients(email);
Jointures simples
• JOIN relie des tables par clés
• Exemple client-commandes

• sql
• SELECT [Link], [Link]
• FROM clients c
• JOIN commandes o ON o.client_id = [Link];
Agrégations
• COUNT, SUM, AVG, MIN, MAX
• GROUP BY pour regrouper

• sql
• SELECT COUNT(*) FROM clients;
• SELECT substr(email, instr(email,'@')+1) AS domaine,
COUNT(*)
• FROM clients
• GROUP BY domaine;
Script de bout en bout
• Créer, insérer, lire, mettre à jour, supprimer
• Tout dans un seul fichier

• python
• import sqlite3
• with [Link]("[Link]") as conn:
• cur = [Link]()
• [Link]("CREATE TABLE IF NOT EXISTS clients (id
INTEGER PRIMARY KEY, nom TEXT, email TEXT)")
• [Link]("INSERT INTO clients (nom, email)
VALUES (?, ?)",
[("Ana","ana@[Link]"),("Ben","ben@[Link]")])
• [Link]()
• for row in [Link]("SELECT * FROM clients"):
• print(row)
Erreurs courantes
• Oublier WHERE dans UPDATE ou DELETE
• Ne pas valider la transaction
• Ne pas paramétrer les valeurs
Bonnes pratiques
• Toujours paramétrer
• Utiliser with conn pour transactions
• Ajouter des index ciblés
• Écrire des tests
Ressources
• Doc Python sqlite3
• Doc SQLite
• Référence SQL

• Liens:
• [Link]
• [Link]
• [Link]

Vous aimerez peut-être aussi