JOIN
est obligatoire !
sql-murder-mystery.db
ici.
SELECT `name`, `sql`
FROM `sqlite_master`
WHERE type='table';
.odt
regroupant :
SELECT...FROM...WHERE...
, mais les témoins ne sont pas toujours précis, ils ne voient qu'une partie d'une plaque d'immatriculation, d'un nom sur une carte...Ainsi, la condition présente après WHERE
SELECT * FROM Lesfilms WHERE titre='cube';
n'est pas forcément "complète". Si l'on cherche tous les films dont le nom contient "ub" on pourra écrire :
SELECT * FROM Lesfilms WHERE titre LIKE'%ub%';
le signe %
représentant ici n'importe quel groupe de caractère.
SELECT * FROM Lesfilms WHERE titre LIKE'%ube';
solution
grâce à la commande
INSERT INTO solution VALUES (1, 'Insérer ici le nom de votre suspect');
Un déclencheur (notion hors programme) vous permettra de vérifier si votre solution est correcte grâce à la commande :
SELECT value FROM solution;
Comme vous avez pu le constater le langage SQL nécessite quelques connaissances et on ne peut pas demander à n'importe quel utilisateur de base de données de maîtriser ce langage.
Vous allez donc créer une interface ( avec le module Tkinter ) qui permettra de consulter la base de données.
Une fois que vos groupes et que la base de données sur laquelle vous allez travailler vous auront été assignés, vous pourrez récupérer le fichier .db
correspondant :
Une des premières choses à faire sera de connaître le schéma de cette base de données...
Vous utiliserez le module SQLite 3, intégré de base dans la distribution standard de Python.
Il permet de gérer une base de données en local, stockée dans un unique fichier d'extension .db
.
On importe le module en début de script :
import sqlite3
Ensuite, il faut établir une connexion avec la base de données en créant un premier objet à l'aide de la méthode connect
:
connexion = sqlite3.connect("base_de_donnees.db")
Une fois la base utilisée, il sera nécessaire de se déconnecter avec :
connexion.close()
Pour exécuter des requêtes SQL, nous allons utiliser un objet appelé curseur ( = cursor ).
Cet objet sera instancié en faisant appel à la méthode cursor
appelée à partir de de notre objet connexion:
curseur = connexion.cursor()
Pour exécuter une requête il suffit ensuite d'utiliser la méthode execute
appelé depuis le curseur :
curseur.execute("SELECT * FROM LesFilms WHERE anSortie='2012';")
La chaîne de caractères présente entre les " ... "
suit les règles habituelles de Python, on peut donc bien sur utiliser des variables issues du reste du programme :
curseur.execute("SELECT * FROM LesFilms WHERE anSortie="+str(annee_de_sortie)+";")
Comme le résultat de la requête est une relation, si l'on veut l'afficher, nous devons utiliser la méthode fetchall
de l'objet cursor
, qui renvoie un tableau des résultats
de la requête :
liste = curseur.fetchall()
On peut alors manipuler ce tableau pour en extraire les informations requises.
Entraînez-vous à utiliser ce module pour bien comprendre son fonctionnement.
La référence principale est la page du cours de Première, qui vous donnera également des liens vers des informations plus poussées.
L'interface devra permettre à l'utilisateur de réaliser les opérations suivantes :
Parmi les requêtes possibles, il faudra qu'il y en ait au moins une qui fasse appel à une jointure.
Vous devrez rendre un document qui présente :
Il devra être le plus modulaire possible; il faudra ( au moins ) qu'il sépare l'aspect visuel ( l'interface ) et la logique de fonctionnement ( récupération des résultats, requêtes,...)
Le code devra bien entendu être documenté.
Tim Burtin
à la place de Tim Burton
. Vous pourrez utiliser la commande SQL LIKE
(abordée dans l’enquête précédente) et générer une requête du type :
SELECT *
FROM LesRealisateurs
WHERE realisateur like "%im Burtin" or realisateur like "T%m burtin" or .... realisateur like "Tim burt%n";
Ou la commande SOUNDEX
qui permet de comparer la sonorité de deux chaînes de caractères différentes :
SELECT *
FROM LesRealisateurs
WHERE soundex("Tim Burton")=soundex(realisateur);