• Aucun résultat trouvé

R EQUÊTES SQL AVEC P YTHON

N/A
N/A
Protected

Academic year: 2021

Partager "R EQUÊTES SQL AVEC P YTHON"

Copied!
3
0
0

Texte intégral

(1)

R EQUÊTES SQL AVEC P YTHON

1 Objectif

L’objectif de ce tp est :

• d’utiliser une application de création et de manipulation de données, offrant une interface graphique, notamment pour créer une base de données simple, ne comportant pas plus de trois tables ayant chacune un nombre limité de colonnes.

• de lancer des requêtes sur une base de données de taille plus importante, comportant plusieurs tables, que les étudiants n’auront pas eu à construire, à l’aide d’une application offrant une interface graphique

• d’enchaîner une requête sur une base de données et un traitement des réponses enregistrées dans un fichier.

2 Interroger une base de données Sqlite avec Python

Pour interroger une base de données avec Python, nous utiliserons le modulesqlite3 : import sqlite3 La commandebdd=sqlite3.connect(’/PATH/mabdd.sqlite’)permet de d’ouvrir la connexion à la base de donnéesmabdd.sqliterangée dans le répertoire de cheminPATHvia la variablebdd. Pour lancer des requêtes SQL sur la base, il faut faire appel à uncurseurcur, objet auquel on passe les commandes SQL en vue d’être exécutées.

db_hotel=sqlite3.connect('Hotel.sqlite') # connexion à la base ou création sinon db_hotel.text_factory = lambda x: str(x, 'latin1') # pas de bol, elle n'est pas utf8 cur=db_hotel.cursor() # curseur pour les passer commande...

Client=cur.execute("""SELECT * FROM T_CLIENT WHERE CLI_NOM LIKE 'D%' ;""") print(Client)

for c in Client:

print(c) db_hotel.close()

Pour refermer l’accès, il suffit d’écrirebdd.close().

Q - 1:Après avoir placer la base de donnéeHotel.sqlitedans votre répertoire et y avoir créé un fichier Python, taper le codePythonci-dessus pour faire apparaître le résultat de la requête.

On s’aperçoit alors que siClient est utilisable, en revanche,print(Client)ne l’est pas. Il faut avoir recours à la commandefetchall():

cursor.execute("""SELECT * FROM T_CLIENT WHERE CLI_NOM LIKE 'D%' ;""") Client=cursor.fetchall()

print(Client) for c in Client:

print(c[2])

Q - 2 :Est ce que cela fonctionne ? Que se passe-t-il si on remplace fetchall() parfetchone() ou fetchmany(4)?

A partir de là, vous pouvez reprendre enPythonles requêtes du tp précédent mais ce n’est pas très visuel. . .

LYCÉECARNOT(DIJON) 1/3 INFO ENMPSI & PCSI - TP2 - BDD

(2)

3 Créer une base de données et la modifier avec Sqlite

Jusqu’à présent, on n’avait pas modifié la base ; on ne faisait que lui poser des questions.

3.1 Créer et supprimer des tables

Si la base de données n’existe pas, la commandesqlite3.connect(’Musique.sqlite’)la crée.

Pour y avoir en même temps la connexion viabdd, écrire : bdd=sqlite3.connect('Musique.sqlite')

bdd.close()

Pour créer une table, il faut lui donner son nomoeuvres et définir chacun de ses attributs avec son type.

bdd=sqlite3.connect('Musique.sqlite') cur = bdd.cursor()

cur.execute("""CREATE TABLE oeuvres(

comp TEXT PRIMARY KEY, titre TEXT,

duree INTEGER, interpr TEXT );""")

Hélas, rien ne se passe car il faut demander l’exécution des lignes. Pour le moment, elles sontstockées danscur.

Pour appliquer un ensemble d’instructions, reste à ajouter la lignebdd.commit().

Dans le code précédent, la clé primaire estcomp. Elle est déclarée à la création de la base. Si des clés renvoient à une autre relationrelation via l’attribut attribut après le type, on tape alors en SQLREFERENCES relation (attribut). Aussi, si une clé utilise plusieurs attributs, la déclaration de la clé se fait après les déclaration des attributs.

Par exemple, dans le schéma relationnellycéedu cours, nous avons : CREATE TABLE e l e v e (

num_p INTEGER REFERENCES p e r s o n n e ( num_p ) ,

n u m _ e t u d i a n t INTEGER, l y c e e _ o r i g i n e TEXT ,

n u m _ c l a s s e INTEGER REFERENCES c l a s s e (no) , PRIMARY KEY ( num_p )

)

CREATE TABLE e n s e i g n e ( n u m _ c l a s s e INTEGER, n u m _ p r o f INTEGER, m a t i e r e TEXT ,

PRIMARY KEY ( n u m _ c l a s s e , n u m _ p r o f ) )

Q - 3 : Créer une base de donnée

Musique.sqlite(ouMusique.db) contenant les relations oeuvres et compositeurs de schéma relationnels suivant :

• oeuvres(comp (chaîne), titre (chaîne), duree (chaîne), interpr (chaîne))

• compositeurs(comp(chaîne), a_naiss (entier), a_mort(entier)) oucompfait référence à l’attribut compde la relationoeuvres

Pour supprimer une table :

cursor.execute("DROP TABLE compositeur;") bdd.commit()

LYCÉECARNOT(DIJON) 2/3 INFO ENMPSI & PCSI - TP2 - BDD

(3)

3.2 Insérer des données dans la table

Pour insérer un tuple dans la relation table, la commande SQL est : INSERT INTO t a b l e VALUES ( . . . , . . . . , . . . . ) ;

Pour y insérer plusieurs tuples :

cur.execute(" INSERT INTO table VALUES ( ... , .... , .... );") cur.execute(" INSERT INTO table VALUES ( ... , .... , .... );") bdd.commit()

ou bien :

cur.execute(""" INSERT INTO table VALUES ( ... , .... , .... ),

( ... , .... , .... );""") bdd.commit()

ou encore :

eleves = [(3, "Hallyday", "Johnny", "5iemeB"), (4, "Mitchelle", "Eddy", "4ieme3"), (5, "Rivers", "Dick", "3ieme2")]

cursor.executemany("""INSERT INTO eleve VALUES (?,?,?,?);""", eleves)

3.3 Mettre à jour et supprimer des enregistrements

On utilise les clausesUPDATE(resp.DELETE) de SQL pour mettre à jour la base (resp. supprimer des lignes) EXEMPLE:

cursor.execute("""INSERT INTO eleve VALUES (?,?,?,?);""", (8, "andrix", "gimi", "4ieme3")) bdd.commit()

Zut ! Raté :

cursor.execute("""UPDATE eleve SET name = ?, first_name=?

WHERE id = ? """,("Hendrix", "Jimmy", 8)) bdd.commit()

et pour supprimer :

cursor.execute("DELETE FROM eleve WHERE id = 8 ;")

ou complètement vider la table :

cursor.execute("DELETE FROM eleve;")

3.4 Créer toi même ta base. . .

Q - 4:A partir des deux fichiersoeuvres.csvetcompositeur.csvremplir intelligemment la base de donnéeMusiques.sqlite.

LYCÉECARNOT(DIJON) 3/3 INFO ENMPSI & PCSI - TP2 - BDD

Références

Documents relatifs

2) Choisir le langage Python 3 ou Python (with turtle) pour faire de la tortue. 2) Dans l’éditeur de texte, saisir

Étape 1 : On se positionne sur la cellule E9 et on tape =C9*D9 pour ce faire, il suffit de cliquer dans la cellule E9, de taper = puis de cliquer dans la cellule C9 de taper *

C’est ce que nous allons observer en simulant la croissance de ces cellules en fonction de différents ratios N 0 initiaux et des valeurs de r différentes. • Prendre en main le

Nous allons donc dans ce cours étudier cette gestion de bases de données, mais au lieu d'utiliser des SGBD (système de gestion de bases de données), nous allons préférer gérer

trois types pour les nombres : int (immuable), float (immuable), complex (immuable) des types pour les s´ equences : de caract` eres : str (immuable), d’entiers positifs :

Dès que vous avez terminé vos études et que vous n’avez plus d’obligations envers votre école, vous n’êtes plus étudiant et vous ne pouvez donc plus faire de

import absmod3 cherche dans le répertoire courant le fichier absmod3.py , puis dans la liste des répertoires définis dans la variable d’environnement PYTHONPATH et enfin dans

• Ils sont en retard.. • Ils sont