Bonjour,
j'utilise sqlite3 avec python 3.4 sous windows.
je suis en pleine découverte d'utilisation de base de donnée, et j'ai pour projet d'améliorer mon programme de recette déjà créé avec python.
après avoir pas mal parcouru de tuto, j'aimerai vous exposer mon problème de l'instant, car je pense qu'il y en aura d'autre !!!
j'ai créé 3 tables :
- recette qui contient la catégorie (pâte, crème...), et le nom
- produit qui contient le nom du produit et son prix
- ingrédient qui permet de stocker la recette.
j'ai créé des index
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 dico_table = {"recette" : [("id_r", "INTEGER", "PRIMARY KEY NOT NULL",), ("categorie_r", "VARCHAR(30)",), ("nom_r", "VARCHAR(60)",) ], "produit" : [("id_p", "INTEGER", "PRIMARY KEY NOT NULL",), ("nom_p", "VARCHAR(60)",), ("prix_p","REAL",) ], "ingredient": [("id_r", "INTEGER",), ("id_p", "INTEGER",), ("poids_i", "REAL",) ] }je remplis mes tables pour l'exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 cur.execute("CREATE UNIQUE INDEX idx_nom_produit ON produit (nom_p)") cur.execute("CREATE INDEX idx_recette ON recette (categorie_r, nom_r)") cur.execute("CREATE INDEX idx_ingredient ON ingredient (id_r, id_p)")
produit : (1, 'sel', 2.15)
produit : (2, 'sucre', 5.63)
produit : (3, 'farine', 0.66)
recette : (1, 'pâte', 'sucrée')
recette : (2, 'créme', 'amande')
ingredient : (1, 1, 0.01)
ingredient : (1, 2, 0.5)
ingredient : (2, 2, 2.0)
ingredient : (2, 3, 2.0)
voici le cœur du problème : je lance une requête voulant sélectionner la recette crème d'amande qui contient du sucre et de la farine.
et voici mon résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 self.cur.execute("""SELECT recette.categorie_r, recette.nom_r, produit.nom_p, produit.prix_p, ingredient.poids_i FROM ingredient JOIN recette JOIN produit WHERE recette.id_r = 2""") l = self.cur.fetchall() for a in l: print(a)
('créme', 'amande', 'sel', 2.15, 0.01)
('créme', 'amande', 'sucre', 5.63, 0.01)
('créme', 'amande', 'farine', 0.66, 0.01)
('créme', 'amande', 'sel', 2.15, 0.5)
('créme', 'amande', 'sucre', 5.63, 0.5)
('créme', 'amande', 'farine', 0.66, 0.5)
('créme', 'amande', 'sel', 2.15, 2.0)
('créme', 'amande', 'sucre', 5.63, 2.0)
('créme', 'amande', 'farine', 0.66, 2.0)
('créme', 'amande', 'sel', 2.15, 2.0)
('créme', 'amande', 'sucre', 5.63, 2.0)
('créme', 'amande', 'farine', 0.66, 2.0)
que ce passe t'il ? mon résultat est multiplié
merci pour vos explications, ma structure n'est pas bonne ? ou la requête n'est pas correct ?
Partager