- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va voir comment cette fois-ci récupérer des objets de notre base de données et également comment les modifier.Vous remarquerez ici également que j'ai modifié le contenu de mes articles de blog pour avoir quelque chose d'un peu plus logique.
00:00:13 :Donc là, j'ai par exemple un article avec comme titre Python, un autre avec comme titre Javascript.Et j'ai laissé le contenu et la description avec le même contenu, puisque vous allez voir que quand on a les mêmes valeurs dans différentes entrées,ça peut poser quelques problèmes quand on va récupérer ces entrées à l'intérieur de Python.
00:00:30 :Donc dans mon interpréteur Python ici, je vais déjà vous montrer comment récupérer tous les modèles de notre table.Donc n'oubliez pas ici d'importer bien sûr depuis blog.models la classe blogPost.
00:00:43 :Et une fois qu'on a cette classe, on va pouvoir utiliser blogPost et on va réutiliser la méthode object,qui va nous permettre d'aller récupérer cette fois-ci tous les objets avec all.
00:00:53 :Donc all, c'est une méthode. Donc là encore, on utilise les parenthèses.J'appuie sur entrée pour valider. Et là, vous voyez qu'on a bien récupéré ce qu'on appelle donc un query set,
00:01:02 :qui est en fait un set de requêtes, donc plusieurs requêtes ensemble.Ça peut être une seule requête ou plusieurs, mais même si vous n'avez qu'une seule requête,en fait vous voyez ici qu'on a les crochets qui définissent une liste.
00:01:12 :Donc ça va être en fait une liste d'éléments, même s'il n'y a qu'un élément, ça sera quand même une liste d'éléments.Et ici, on a le ID qui est affiché pour chaque élément.
00:01:21 :Donc on a bien le ID de 1 et le ID de 2.Et on a donc bien deux blogPost qui nous sont retournés,qui correspondent aux deux blogPost qu'on a dans notre base de données ici.
00:01:30 :Donc ça c'est avec all, ça nous permet tout simplement de récupérer tout ce qui est à l'intérieur de notre table.On va ensuite pouvoir récupérer un article précis, donc par exemple l'article piton, en ciblant directement un champ.
00:01:43 :Donc par exemple, on va utiliser le champ ID ou le champ title.Donc là pour ça, on va utiliser encore une fois notre classe blogPost.
00:01:50 :On va utiliser .object et cette fois-ci on va utiliser .get.Alors .get, ça va nous retourner obligatoirement une seule entrée.Ça ne peut pas retourner 0 ou plus qu'une entrée, c'est obligatoirement une entrée.
00:02:02 :Donc si je fais get et que je dis par exemple title est égal à piton,et que j'appuie sur entrée, là vous voyez qu'on récupère bien l'objet numéro 1qui correspond à notre article de blog ici avec l'ID 1.
00:02:13 :Donc c'est parfait, on a bien récupéré le bon article que l'on souhaitait récupérer.Par contre, là comme vous voyez, on a le même contenu pour les deux articles dans le champ content.
00:02:23 :Dans content ici, on a content et content.Donc pour vous montrer, je vais mettre autre chose.Je vais mettre le contenu puisque là ça fait beaucoup de content dans tous les sens, donc on s'y perd un peu.
00:02:32 :Donc je mets le contenu ici, je sauvegarde et vous allez voir que ça peut poser problème avec getpuisque si je fais blogpost.object.get et que cette fois-ci on dit que content,
00:02:42 :on veut récupérer l'article qui contient le contenu, et bien là on va en avoir deux.Donc j'appuie sur entrée et là on a une erreur.
00:02:49 :Alors dans ce cas-ci, on a l'erreur does not exist, c'est pas celle-là que je m'attendais à avoirpuisque en fait là on a bien le contenu.
00:02:56 :Alors en fait ici vous voyez, là je n'ai pas de majuscule et moi ici j'ai mis une majuscule.Donc en fait il a raison, il n'y a pas actuellement d'entrée dans ma base de donnéesqui ont comme contenu le contenu avec une majuscule.
00:03:07 :Donc ça me permet tout de suite de vous montrer également que cette méthode,quand elle ne trouve pas d'objet, et bien elle retourne une erreur.
00:03:13 :Donc il y a d'autres façons que l'on verra plus tard qui nous permettent de ne pas avoir d'erreurau cas où l'objet n'existe pas.Avec get, si vous essayez de récupérer quelque chose qui n'existe pas,donc par exemple en ciblant un champ qui a un contenu qui n'est pas disponible dans notre base de données,
00:03:28 :et bien là vous aurez une erreur.Donc moi ce que je voulais vous montrer c'est pas cette erreur,mais c'est plutôt l'erreur dans le cas où on a plus qu'un seul article qui a le même contenu.
00:03:37 :Donc là je remets avec une minuscule au début,donc le contenu tout en minuscule, je valide,et là vous voyez qu'on a un autre type d'erreur qui cette fois-ci est multiple objects returned,et ça nous indique bien que get a retourné plus qu'un seul blog post,ça en a retourné précisément deux.
00:03:52 :Donc avec get vous voyez qu'il faut être très précis,donc là ce que je pourrais faire c'est spécifier et dire par exemple que title est égal à piton,mais dans ce cas-ci on pourrait tout simplement enlever content,puisqu'on a un seul article qui contient piton,mais vous pouvez très bien mettre plusieurs champs à l'intérieur de get,
00:04:08 :c'est tout à fait possible,vous n'êtes pas obligé de ne mettre qu'un champ à l'intérieur des parenthèses,vous pouvez en mettre plusieurs.Là dans ce cas-ci vu que je n'ai qu'un article qui contient le titre piton,je peux juste mettre title égal piton et ça va me retourner l'article en question.
00:04:22 :Un petit point aussi sur les clés primaires,vous allez voir qu'on peut spécifier id égal 1 pour récupérer le premier article,ou id égal 2 pour récupérer le deuxième article,et on peut également utiliser pk,pk qui signifie primary key en anglais,donc clé primaire.
00:04:37 :Donc si on fait ça, ça marche également.Alors quelle est la différence entre id et pk ?Et bien en fait id ça va vraiment être le nom de la colonne.
00:04:44 :Si vous vous souvenez bien quand on retourne dans notre projet sur PyCharm,dans initial ici,et bien Django avait donné comme nom à notre primary key id,donc c'est ça en fait qui fait que dans notre base de données,on a une colonne id ici qui contient notre clé primaire.
00:05:00 :Donc dans ce cas-ci pk et id c'est la même chose,mais si dans mon modèle,donc là je vais revenir dans PyCharm,si dans mon modèle par exemple j'avais spécifié que title était la clé primaire,donc si j'avais mis primary key ici égal à true,et bien dans ce cas-ci en fait j'aurais pu utiliser pk
00:05:17 :et ça aurait automatiquement compris qu'il faut récupérer le champ title,mais je n'aurais pas eu de champ id,puisque j'aurais spécifié que pour la clé primaire j'utilise ce champ,donc dans ma migration ici je n'aurais pas eu id,j'aurais eu tout simplement title,et là on aurait eu le primary key qui aurait été mis sur title.
00:05:34 :Donc on n'aurait pas eu de colonne id,et donc si j'avais dans mon interpréteur Python ici utilisé id,ça n'aurait pas fonctionné,puisque dans ma base de données je n'aurais pas eu de colonne qui s'appelle id.
00:05:46 :Donc là dans ce cas-ci ça marche avec id et pk,mais il ne faut pas penser que les deux sont similaires,c'est juste que pk ça représente la clé primaire,donc là si j'avais mis par exemple le titre comme clé primaire,j'aurais pu mettre pk égal,et dans ce cas-ci Python puisque ça aurait été le titre de l'article.
00:06:01 :Donc là j'aurais pu mettre pk égal Python.Dans l'autre cas vu qu'on a laissé Django gérer les choses de son côté,il a créé pour la clé primaire une colonne qui s'appelle id,donc c'est pour cette raison que vous pouvez utiliser id ou pk.
00:06:13 :Dans mon cas je préfère souvent utiliser pk,je trouve que c'est plus uniforme,puisque ça va toujours récupérer la clé primaire,donc peu importe le nom de la colonne,vous êtes assuré avec pk que c'est toujours la clé primaire que vous ciblez.
00:06:26 :Et comme généralement avec get on va vouloir récupérer des objets uniques,et que la clé primaire est assurée d'être unique,et bien je trouve que c'est un bon combo,puisque si vous utilisez comme on l'a vu tout à l'heure content,là content comme ce n'est pas une clé primaire,
00:06:39 :vous pouvez avoir différents articles qui vont avoir le même contenu,et donc on peut avoir des erreurs avec get.Donc get et pk c'est un bon combo.
00:06:46 :Alors attention je n'ai pas dit que ça allait nous assurer de ne pas avoir d'erreur,puisque si on utilise une clé primaire qui n'existe pas dans notre base de données,donc par exemple si j'utilise pk égale 3 ici,j'aurais quand même une erreur,puisque là la clé primaire est forcément unique,
00:07:01 :mais dans ce cas ci elle n'existe pas dans notre base de données,puisqu'on n'a pas de troisième article.Donc maintenant que je vous ai montré comment récupérer tous les éléments de votre table avec all,et comment récupérer un élément avec get,je vais vous montrer comment modifier des éléments de ma base de données.
00:07:14 :Donc on va déjà récupérer le premier article,donc je vais le mettre dans une variable,donc je vais faire blogpost.object.get,et on va dire pk égale 1.
00:07:23 :Donc je récupère le premier article de ma base de données,si je fais b entrer pour afficher,j'ai bien ici un objet de type blog post.
00:07:31 :Donc je vais pouvoir ensuite modifier cet objet,tout simplement comme on le ferait avec n'importe quel objet Python,donc par exemple en disant b.content égale cet article parle de Python.
00:07:42 :Pour l'instant j'ai modifié le contenu de b.content,donc si j'affiche b.content on voit bien que le contenu a été modifié.Pour l'instant je n'ai modifié que le contenu de l'attribut content,si je retourne dans ma base de données que j'actualise,le contenu n'a pas été modifié.
00:07:58 :Donc là il va falloir encore une fois utiliser la méthode save,pour pouvoir sauvegarder ces changements dans la base de données.Donc si je fais b.save,
00:08:06 :que je valide avec entrée,que je reviens dans ma base de données et que j'actualise,là on voit bien que le contenu a été actualisé.
00:08:12 :Donc c'est pas plus compliqué que ça,pour modifier un article on fait b, on utilise le champ,donc par exemple si je veux modifier publish,je vais dire publish égale true,et ensuite je sauvegarde le champ,je reviens ici, j'actualise et là j'ai bien une valeur de 1.
00:08:26 :Donc vous voyez c'est très facile,une fois qu'on commence à comprendre quelle méthode on peut utiliser,ça reste du Python, de l'Orienté Objet,on a des instances qui correspondent à des enregistrements dans notre base de données,ces instances vont avoir des attributsqui correspondent aux différentes colonnes dans notre base de données,
00:08:42 :donc à nos champs qu'on a définis dans l'objet modèle,donc dans notre objet ici modèle,à l'intérieur de notre application.Donc on a accès à tous ces attributs,et donc là vous voyez qu'on a déclaré des attributs de classe,donc les attributs de classe dans le blog post,et donc là si vous êtes à point sur votre théorie de la programmation Orienté Objet,
00:09:00 :vous comprendrez bien que donc comme je vous avais expliqué,la classe blog post ça représente la table dans notre base de données,et ici on a des attributs de classe,donc title, slug, published, etc,c'est des attributs qui appartiennent à notre classe,et ces attributs ici,ils représentent les colonnes de notre base de données,
00:09:18 :donc title, slug, published.Par contre quand on parle d'instance,quand on récupère une instance ici,par exemple dans la variable B comme je l'ai fait ici en récupérant le premier article,là on passe du côté instance,donc on va avoir les mêmes attributs qu'on avait sur notre classe,donc title, slug, content, etc,
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.