← Tous les exercices
Empêcher les doublons : clé composite (source, identifiant externe)
Partie 1 · ★★
Cas unitee : une même annonce peut être relayée par plusieurs sources, et l'identifiant externe n'est pas unique globalement : on l'utilise avec la source (clé composite). Les doublons doivent être détectés et empêchés.
Complète la contrainte d'unicité sur (source_id, ext_id) et utilise l'insertion qui ignore les doublons. Le même X1 venant de deux sources différentes doit être conservé deux fois ; le doublon exact (même source, même X1) doit être ignoré. (Syntaxe SQLite : exemple adapté ; le cours ne fixe pas le SGBD.)
import sqlite3 con = sqlite3.connect(":memory:", isolation_level=None) con.executescript(""" CREATE TABLE source(id INTEGER PRIMARY KEY, nom TEXT UNIQUE); INSERT INTO source(nom) VALUES ('BOAMP'), ('TED'); CREATE TABLE marche( id INTEGER PRIMARY KEY, source_id INTEGER REFERENCES source(id), ext_id TEXT, titre TEXT, UNIQUE (___, ___) ); """) annonces = [(1, "X1", "Classes modulaires"), (1, "X1", "Classes modulaires (relais)"), (2, "X1", "Classes modulaires"), (1, "X2", "Base vie")] for a in annonces: con.execute("INSERT ___ IGNORE INTO marche(source_id, ext_id, titre) VALUES (?, ?, ?)", a) nb = con.execute("SELECT COUNT(*) FROM marche").fetchone()[0] nb_x1 = con.execute("SELECT COUNT(*) FROM marche WHERE ext_id = 'X1'").fetchone()[0]
Ctrl/⌘+Entrée