Salut à tous,
Je bosse sur un gros projet et actuellement j'ai deux possibilités pour le faire.
Je me demandais quelle était la méthode la plus efficace parmi les deux suivantes. Par efficace, j'entends la plus rapide, la plus pythonnique et dont le code est facile d'entretien si j'ai besoin de retoucher les scripts d'ici un an ou deux.
Je vais vous proposer deux méthodes et je vous demanderai de justifier pourquoi celle-ci et pas l'autre(S.V.P.)
------------------------------------------------------------------
Mon programme permet de lister des objets qui ont chacun jusqu'à 14 caractéristiques (nom, couleur, forme, ...) dont 6 sont obligatoires et 8 sont facultatives. C'est-à-dire que celles qui sont obligatoires sont utilisées souvent par le programme, et les autres le sont plus rarement. Je créé un programme qui permet d'ajouter un objet avec ces caractéristiques (en obligeant l'utilisateur à saisir au moins les 6 principales), d'éditer ces caractéristiques, de supprimer un objet, et de formater ces données pour les afficher dans une fenêtre.
Première Méthode :
Utilisation d'une base de données. On utilise le module sqlite3 pour stocker les données dans 15 colonnes (une colonne pour le INTEGER PRIMARY KEY) grâce à leur nom.
Cette méthode est celle que j'utilise habituellement, mais avec 15 colonnes et des tuples à rallonge, on se perd assez vite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import sqlite3 def ajouter_objet(caracteristiques): #caracteristiques est un tuple qui contient les données dans l'ordre # et qui sont issues d'une interface graphique non représentée ici #pour simplifier, et qui permet à l'utilisateur de saisir les données dont #les 6 premières sont obligatoires, et les 8 autres facultatives db = sqlite3.connect("database.db") db.execute("INSERT INTO objets VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", caracteristiques) db.commit() db.close() def modifier_objet(): [...] def supprimer_objet([...]): [...] def montrer_objet(nom): db = sqlite3.connect("database.db") c = db.execute("SELECT * FROM objets WHERE nom=?", (nom,)) Informations_Objets(c.fetchone()) #Formate puis affiche #les données grâce à une interface graphique en wxPython
Deuxième méthode :
Utilisation d'une base de données et de la sérialisation des classes. On utilise les modules sqlite3 et (c)Pickle. La base de données comporte 3 colonnes, une pour l'index INTEGER PRIMARY KEY, une autre pour le nom de l'objet et la troisième nommée "serial" pour stocker une classe perso sérialisée sous forme de string. Pour afficher les données formatées, on utilise des Get.
A vous de me dire si la seconde méthode est meilleure, ou si je dois continuer d'utiliser ma méthode habituelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 import sqlite3 import cPickle class Objet: def __init__(self, nom, couleur, forme, ...): self.nom = nom self.couleur = couleur self.forme = forme [...] def GetColour(): return self.colour def SetColour(couleur) self.couleur = couleur [...] [...] #----------------------------------------------------- def ajouter_objet(objet): #On a recueilli les informations provenant de l'interface graphique #de saisie des données et on a réalisé des Setxxx() pour construire #l'objet grâce à la classe ci-dessus. Puis, on transmet l'objet à la #fonction ajouter_objet. serial = cPickle.dumps(objet) db = sqlite3.connect("dabatase.db") c = db.cursor() db.execute("INSERT INTO objets VALUES(?,?,?)", (c.lastrowid, objet.GetName(), serial) db.commit() db.close() [...] def montrer_objet(nom): db = sqlite3.connect("database.db") c = db.execute("SELECT * FROM objets WHERE nom=?", (nom,)) c.fetchone() objet = cPickle.loads(c[2]) Informations_Objet(objet)
Et, n'oubliez pas de justifier votre choix svp
Merci beaucoup !
Lotendan
Partager