Exercice 13
On souhaite gérer une bibliothèque en Python. A cet effet on souhaite créer une classe Python nommé : Book ayant les attributs suivants: Title , Author , Catégory
- Créer la classe Book: avec les attributs cités ci-dessus
- Créer une méthode nomme create_db() : qui permet de créer une base de donnée nommée 'data.db' au sein de laquelle une table SQLite nommée 'author' ayant les attributs : id (primary key) , name (varchar), et une table SQLite nommée 'book' ayant les attributs : id(primary key) title (varchar) , author (varchar) , catégory (varchar) author_id (fk)
- Créer une méthode nommée add_book() : permettant d'ajouter un livre et l'enregistrer dans la base de données
- Créer une méthode update() : permettant de mettre à jours l'enregistrement d'un livre
- Créer une méthode delete() : permettant de supprimer un livre
- Créer une méthode display() : permettant d'afficher la liste des livres
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import sqlite3 class Book: def __init__(self, title, author, category): self.title = title self.author = author self.category = category @staticmethod def create_db(): conn = sqlite3.connect('data.db') cursor = conn.cursor() # Création de la table 'author' cursor.execute(''' CREATE TABLE IF NOT EXISTS author ( id INTEGER PRIMARY KEY, name VARCHAR(255) ) ''') # Création de la table 'book' avec une clé étrangère 'author_id' cursor.execute(''' CREATE TABLE IF NOT EXISTS book ( id INTEGER PRIMARY KEY, title VARCHAR(255), author VARCHAR(255), category VARCHAR(255), author_id INTEGER, FOREIGN KEY (author_id) REFERENCES author(id) ) ''') conn.commit() conn.close() def add_book(self): conn = sqlite3.connect('data.db') cursor = conn.cursor() # Vérification si l'auteur existe déjà, sinon, l'ajouter cursor.execute('SELECT id FROM author WHERE name = ?', (self.author,)) author_data = cursor.fetchone() if author_data is None: cursor.execute('INSERT INTO author (name) VALUES (?)', (self.author,)) author_id = cursor.lastrowid else: author_id = author_data[0] # Ajouter le livre dans la table 'book' cursor.execute(''' INSERT INTO book (title, author, category, author_id) VALUES (?, ?, ?, ?) ''', (self.title, self.author, self.category, author_id)) conn.commit() conn.close() def update(self, book_id, new_title, new_author, new_category): conn = sqlite3.connect('data.db') cursor = conn.cursor() # Vérification si l'auteur existe déjà, sinon, l'ajouter cursor.execute('SELECT id FROM author WHERE name = ?', (new_author,)) author_data = cursor.fetchone() if author_data is None: cursor.execute('INSERT INTO author (name) VALUES (?)', (new_author,)) author_id = cursor.lastrowid else: author_id = author_data[0] # Mettre à jour les informations du livre cursor.execute(''' UPDATE book SET title = ?, author = ?, category = ?, author_id = ? WHERE id = ? ''', (new_title, new_author, new_category, author_id, book_id)) conn.commit() conn.close() def delete(self, book_id): conn = sqlite3.connect('data.db') cursor = conn.cursor() # Supprimer le livre de la table 'book' cursor.execute('DELETE FROM book WHERE id = ?', (book_id,)) conn.commit() conn.close() @staticmethod def display(): conn = sqlite3.connect('data.db') cursor = conn.cursor() # Récupérer la liste des livres avec les détails de l'auteur cursor.execute(''' SELECT book.id, book.title, author.name, book.category FROM book INNER JOIN author ON book.author_id = author.id ''') books = cursor.fetchall() conn.close() # Afficher la liste des livres for book in books: print(f"ID: {book[0]}, Titre: {book[1]}, Auteur: {book[2]}, Catégorie: {book[3]}") # Exemple d'utilisation : # Créer la base de données et les tables Book.create_db() # Ajouter un livre book1 = Book("Cours d'analyse", "J.Lelong Ferrand", "Mathématique") book1.add_book() # Afficher la liste des livres Book.display() |
Younes Derfoufi
CRMEF OUJDA