Session du 25 avril 2024 à 20h00
Data Science & IA
Bases de Données
Librairie Standard & Modules
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Clés étrangères SQLite et visualisation
continuons l''exercice de la dernière fois avec notre database.
Essayons d'aller un peu plus loin avec des clé étrangères, de la statistique et du graphique.
00:00:00 :Ok, j'ai l'enregistrement qui démarre.Je vais attendre un peu que les gens arrivent.Vous n'avez pas eu de problème pour vous connecter ?Je me suis connecté avec l'email que j'ai reçu hier.
00:01:23 :Je vais regarder.Effectivement, quand je viens de me connecter sur le site, on me dit qu'il faut être premium.Donc quand vous avez réussi à vous connecter, c'est parce que...
00:02:07 :J'ai directement pris le lien de l'email.Je ne sais pas comment je vais pouvoir régler ça, parce que je ne peux pas le mettre sur le Discord,sinon tout le monde va pouvoir y accéder.
00:02:26 :Le mail que vous avez reçu, c'est un mail que vous recevez tout le temps avant le mentorat ?Les mercredis, oui.Hello Simon.Attendez, je vais essayer de voir avec Thibaut.
00:03:59 :Simon, tu as réussi à te connecter avec un email ?Comme il n'y avait pas de lien sur le site, je l'avais mis dans mon calendrier.
00:04:13 :Et depuis le lien dans mon calendrier, il y avait le lien.Ok, je vais leur proposer ça.Tu crois qu'on ne peut pas mettre le lien directement dans le Discord de la section mentorat ?
00:04:31 :Je peux le mettre, mais j'ai peur qu'il n'y ait pas que les premiums.Il me semble que si. Je ne suis pas sûr à 100%, mais il me semble que ce ne sont que les premiums.
00:04:41 :Oui, il n'y a que les premiums.Je vais le mettre là-dessus. Bonne idée.Si vous voyez le Discord en même temps, vous pouvez me dire si ce truc-là fonctionne.
00:05:15 :Normalement, ça a l'air bon. Oui, je pense que c'est le bon lien.Oui, c'est celui-là. Merci, Simon. J'ai remis sur le Discord.Ça a l'air d'arriver. Bonsoir tout le monde.
00:06:01 :Salut, merci.Salut. Désolé, je ne sais pas ce qu'il s'est passé.Je me demande s'il n'y a pas un petit conflit avec les liens mentorat Tosa.
00:06:14 :C'est possible, parce que dès que je suis rentré, tout de suite, il m'a mis le lien de mentorat Tosa.Je pense qu'il n'est pas à l'heure. Ok, ça y est, tout le monde arrive.
00:06:29 :Ok, désolé pour l'attente et pour le petit bordel, mais maintenant ça devrait être réglé.Alors, je ne sais pas si vous avez vu le programme, mais ce que je vous propose,c'est qu'on continue l'exercice qu'on avait commencé la dernière fois,avec notre petite database SQLite.
00:07:15 :On revient un peu dessus, on fait un petit truc.On essaie d'aller un petit peu plus loin en utilisant une clé étrangère.En gros, en utilisant plusieurs tables avec des liens entre les tablesça permet de décrire des items un petit peu plus facilement.
00:07:42 :Oui, bonsoir Pierre.Salut, ça va ?Ça va, ça va.Au fait, j'ai utilisé moi la plateforme Doctrine pour enregistrer le mentorat dans mon calendrier.
00:08:02 :Mais j'ai vu mentorat Tosa à 19h.Oui.Bon, je ne sais pas si c'est le même ou…Non, non, ce n'est pas le même.Là, c'est le mentorat classique et le Tosa, c'est le truc de la formation.
00:08:15 :Ok, d'accord, d'accord, d'accord.Et 19h, c'est quoi ? C'était avant ?Il n'est pas l'heure pour moi chez moi, parce que moi je suis en dîner.
00:08:26 :Ah d'accord, après…Il y a une heure entre nous, oui.Ok.Mais bon, là, c'est bien le mentorat classique.Ça marche.Ok, ça marche.Ça marche.
00:08:37 :Ça marche.Ouais, donc là, j'étais en train de récapituler un peu ce qu'on avait fait la dernière fois.Je vous propose qu'on aille un tout petit peu plus loin où on va faire une clé étrangère.
00:08:45 :Et après, on peut faire aussi, une fois qu'on aura notre database,on peut s'amuser à faire quelques requêtes dessus si ça vous intéresse.Et puis, on pourra faire un plot interactif sur une carte de France avec notre data.
00:09:02 :Et si on a le temps, ou si vous voulez switcher tout de suite,je peux vous montrer aussi comment on fait une database MySQL avec un container Docker.
00:09:10 :Plutôt que de mettre en place soi-même un serveur MySQL, ce qui est un peu lourd,vous verrez qu'avec un container Docker, c'est beaucoup plus simple,et sans risque en fait, parce que vous n'allez pas modifier des fichiers de configurationou je ne sais pas quoi dans votre PC, ce qui peut être un peu relou.
00:09:29 :Est-ce que ça vous va ?Ok, alors.Je vais me mettre ici.Ça va normalement ? Est-ce que là ? Ouais, là normalement ça va, vous voyez bien.
00:10:05 :Vous me dites dans le chat quand vous avez un problème avec l'écran.Moi, je surveille les deux.Attendez, je vais organiser un petit peu mes écrans.
00:10:21 :Et puis, on va récupérer un petit peu le projet de la dernière fois.Attendez, je récupère ce qu'il faut. Désolé.Voilà.Tu parles Simon du VS Code ou de moi ?
00:10:43 :Ok, alors. Là c'est bon, c'est assez gros ?Je vais enlever ma caméra.Je vais enlever ma caméra.Ok.N'hésitez pas si ça ne va pas, si ce n'est pas assez gros.
00:11:10 :Donc, la dernière fois, ce qu'on avait, c'était, voilà.Donc, on avait un fichier CSV avec différents headers.Donc, on avait le type d'acte, l'année, l'arrondissement et le nombre.
00:11:24 :Donc, si on parcourt un petit peu, on voit que par exemple,je vais descendre un peu, en 2021, dans le sixième arrondissement,on a eu quatre enregistrements de naissance.
00:11:36 :On a eu ensuite, je ne sais pas, en 2007,on a eu dans le septième arrondissement, 210 décès.Voilà un petit peu le type de data qu'on a.
00:11:45 :Et donc, ce qu'on a fait, nous, la dernière fois,c'est qu'on a créé un script qui faisait une connexion avec une database.Donc, en gros, ce qu'on faisait, c'est que là,on faisait la connexion avec la database.
00:11:57 :N'hésitez pas, parce qu'il me semble qu'il y avait pas mal de monde là,qui était là la semaine dernière aussi.Mais si vous avez des questions, n'hésitez pas,on peut revenir dessus sans problème.
00:12:08 :Donc là, on fait la connexion avec la database depuis le script Python.Et ici, on écrit la requête SQL,que l'on va venir faire, en fait, dans la database.
00:12:24 :En fait, ici, c'est juste qu'il y a une espèce de surcharge de Python.Ça, cette query ici, on pourrait très bien l'écrire directement dans la database.
00:12:33 :Vous voyez ici, si je fais nouveau fichier,et que j'écris, comme on l'avait appelé,citydata.db.Donc là, j'ai une database.Et la dernière fois, j'avais un petit peu galéréà trouver la bonne extension qu'il faut.
00:12:53 :En fait, l'extension, c'est quand vous faites ouvrir avec,vous pouvez faire avec SQLite Viewer.C'est plutôt ici.Vous faites SQLite Open Database.Et donc là, vous choisissez la database.
00:13:12 :Et donc là, vous l'avez ici, votre database.Et vous pouvez aller directement faire des requêtes depuis VS Code.Donc là, si je fais New Query, par exemple,et que je fais Show Tables.
00:13:24 :Et là, je fais Run Query.Je n'ai pas Table, mais je pense qu'il ne connaît pas SQLite.C'est ça.Mais on peut directement ici rentrer des queries.
00:13:34 :Donc là, si je récupère la query qu'on avait fait la dernière fois,directement là-dessus.Vous voyez, normalement ici, si j'écris comme ça,je peux faire lancer ma table.
00:13:50 :Donc là, il a bien créé la table.C'est un petit peu gros.C'est un peu compliqué à naviguer.Il a créé la table.Et donc maintenant, je peux faire des queries là-dedans.
00:14:01 :Si je fais Select.Je vais zoomer maintenant.Select étoile from Paris Data.Et là, je fais Run Query.Je n'ai rien du tout.Par contre, ce que je peux faire maintenant, c'est que je peux lui dire.
00:14:20 :Je peux aller insérer directement.Je vous montre juste comment on fait pour insérer directement dans SQLite.On avait dit ici, c'était Insert.Voilà.Donc là, si je fais Insert.
00:14:35 :Et là, en Values, on peut mettre.Donc, qu'est-ce qu'on a mis ?On a ID, type d'acte.Donc, on va mettre naissance 2015, douzième.Donc là, on peut mettre naissance.
00:14:58 :Ici, on doit mettre naissance année arrondissement.Donc, on va mettre en 2012.Arrondissement dans le douzième arrondissement.Et là, on va dire le nombre.Donc, 202 par exemple.
00:15:20 :Non, je ne veux pas enregistrer ça.Et donc là, si je fais Run Query, il va m'ajouter.Et maintenant, si je vais là, Run cette query,il va m'afficher ici le résultat de ma query.
00:15:35 :Donc là, à chaque fois, il ajoute.J'ai des gens qui arrivent.Ouais.Salut pour ceux qui arrivent.Peut-être que vous avez galéré à cause du lien.
00:15:46 :J'espère que ça va maintenant.Voilà.Donc, on était à peu près là.Donc là, c'est juste pour vous montrer qu'on peut fairedes requêtes directement dans SQLite avec VS Code.
00:16:00 :Donc, c'est assez intéressant.Et ça, je n'enregistre pas.On s'en fout.Voilà.Donc là, on avait créé...Je vais supprimer la database.En gros, pourquoi je passe par Python pour faire la requêteplutôt que de faire directement SQLite ?
00:16:16 :Pour pouvoir faire des boucles et tout ça.C'est plus pratique.Donc là, on crée la database.Je vais rezoomer un peu.On a créé la database avec les colonnes.
00:16:23 :On a défini les types sur les colonnes, etc.Et ici, ce qu'on faisait, c'est qu'on allait récupérerles infos qu'il y avait dans notre fichier CSV.
00:16:31 :Et on allait un petit peu triturer tout ça.Donc, on parcourait toutes les lignes, etc.Pour pouvoir juste extraire la data.Donc, chaque data du fichier CSV.
00:16:42 :Pourquoi je n'ai plus le header ?C'est bizarre, je n'ai pas le header.Donc, on allait chercher...Pas de souci, Axel, pour le retard.Et on allait chercher ligne par ligne,en fait, ce qu'on avait là-dedans.
00:17:10 :Ah non, pardon, c'est pas...On allait chercher ligne par ligne les infos qu'il y avait.Et on l'a balancé dans notre database.En faisant ici, insert into DB,on utilisait cette query-là.
00:17:22 :Et on balançait dans notre database.Est-ce que ça va pour tout le monde, pour l'instant ?Ou vous avez besoin qu'on revienne en détailsur certains points, des choses que vous n'avez pas compris ?
00:17:31 :Ou si ça vous va, on continue.Ok, bon, s'il n'y a pas de questions, on continue.Donc, je vais dézoomer un peu.Voilà, donc maintenant,je vais relancer le script juste pour créer la database.
00:17:47 :Voilà, on a notre database avec tout ce qu'il faut dedans.Voilà, on pourrait se dire...En fait, on aimerait bien afficher sur une cartedes données qu'on a dans notre database,en fait, on aimerait bien afficher sur une cartedes points,donc sur une carte interactive de France,donc là, en l'occurrence, ce serait sur Paris,
00:18:13 :le nombre d'actespar arrondissement.Voilà, donc il faut se dire que voilà,on aimerait bien que, par exemple, pour le 19e arrondissement,on peut avoir par année,par type d'acte, etc.,
00:18:36 :on peut vouloir tracer quelque chose.Voilà l'exercice que je vous propose.Là, pour faire ça, il va falloir avoir les coordonnées par arrondissement.Donc là, typiquement, vous voyez, on a le 19e arrondissement,on sait juste son numéro d'arrondissement,mais on ne sait pas quelles sont ses coordonnées.
00:18:56 :Ce qu'on fait, c'est que notre base de données,elle est une autre table qui lit, en fait,l'arrondissement avec sa latitude-longitudede l'arrondissement.Comme ça, on sait que, quand on va faire la requête,quand on va aller voir cette ligne-là,on sait qu'arrondissement 19, on va aller faire une jointure
00:19:14 :avec une autre table,et on saura quelle sera sa longitude et sa latitude.Donc, pour faire ça, il va falloir qu'on modifieun petit peu notre database.
00:19:27 :On ne pourra pas exactement la faire comme ça,il va falloir qu'on crée une autre table dans notre databaseavec les coordonnées d'arrondissement.Donc, on va le faire ici.
00:19:38 :Et là, au lieu de mettre arrondissement Integer,on va dire arrondissement Id,Integer, et on va lui dire que c'est une foreign key, ici.Donc là, on va écrire ce qu'il faut pour dire que c'est une foreign key.
00:19:57 :Donc, foreign key.Là, on va dire c'est quoi la foreign key ?C'est arrondissement Id.Et on fait quoi ? On référencie,References,le nom de l'autre table,donc l'autre table, on va l'appeler tout simplementarrondissement,arrondissement,et on va lui mettre le nom de la colonnequi est référencée.
00:20:32 :Donc là, ça va être l'Id, tout simplement.OK, donc normalement,avec ça, je pense qu'on est bon.Et forcément, il va falloir créer la table.
00:20:47 :Il va falloir qu'on crée la table de l'arrondissement.Dis-moi, Pierre-André, là, tu parles en quelle langue, en fait,dans le script, à cet endroit-là ?
00:20:58 :Alors ici, tout ce qui est dans Query,c'est du SQL.Tu vois, tout ce qui est là, c'est du SQL.C'est pour ça que j'ai fait une petite démo tout à l'heureoù je me suis mis dans la database et j'ai écrit les requêtes SQL.
00:21:13 :Ça, c'est pas propre à Python.En fait, là, ce qu'on fait, c'est qu'on a une requête SQLqui marcherait directement dans une database.Et en fait, ta requête SQL,tu l'encapsules dans du langage Python.
00:21:28 :En venant ici, tu vois.Tu fais ta connexion avec ta database.Tu es dans un contexte manager ici de ta connexion database.T'écris ta query.
00:21:37 :La query, je pourrais l'écrire au-dessus.Il n'y a pas de...Tu vois, si je la mettais ici,ça serait pareil, j'en ai pas besoin.Et ici, je lui dis à Python...
00:21:49 :En fait, Python, ici, il a créé un lien entre lui et la database.Et je lui dis, exécute la query et commit.Ça, c'est du langage Python pour discuter avec la database.
00:22:01 :Mais cette requête, on ne peut pas l'écrire en Python.En fait, il faut l'écrire en...En fait, on pourrait...Tu vois, ici, j'ai importé le module SQLite 3qui permet à Python d'envoyer des requêtes SQL.
00:22:19 :C'est un choix qui a été fait.On aurait très bien pu, directement avec Panda,balancer le truc.En fait, tout ce que j'écris là, tu vois, query, etc.,
00:22:30 :avec Panda, on peut directement balancer tout ça dans...Par exemple, t'as un data frame,tu peux le balancer directement dans la database.Là, c'est parce que je n'ai pas envie de trop compliqueret de rajouter des choses en plus de ce qu'on crée.
00:22:44 :Merci.Oui, je t'en prie.Et André, c'est en commentaire parce que...C'est pourquoi tu n'arriverais pas à le comprendre en Python.Et c'est après, quand ça va dans du SQLite,que ça comprend que c'est vraiment une query.
00:23:01 :Oui, exactement.Mais là, ce n'est pas vraiment un commentaire.C'est une chaîne de caractère.Pourquoi elle est comme ça ?C'est juste parce que...Pourquoi j'ai mis trois ?
00:23:10 :En fait, j'aurais pu mettre juste les deux comme ça,mais c'est parce que je l'écris sur plusieurs lignes,donc c'est pour ça.Mais c'est vraiment...
00:23:16 :La query, c'est une chaîne de caractèrequi est interprétée ici par l'objet connexionqu'on a créé ici.D'accord.Mais là, c'est vraiment une chaîne de caractère.
00:23:28 :OK, merci.Je t'en prie.Voilà, donc on est...Où est-ce qu'on était ?Il va falloir qu'on crée la database.En fait, je pense que ce que je pourrais faire,c'est au lieu de créer tout ça là-dedans...
00:23:53 :Je réfléchis comment on pourrait le faire.Create DB.Bon, allez, on va le faire ici.C'est peut-être pas terrible, mais...On va la créer ici.
00:24:09 :En fait, on va créer d'abord notre database d'arrondissement.Donc, create table if not exist arrondissement.Donc là, ID, integer,ça va s'incrémenter automatiquement.On va dire...
00:24:30 :Arrondissement...Number...Ça va être un integer.Et on va mettre latitude,lat et longitude.Donc là, ça va être du numérique,parce que ça va être un chiffre à virgule,enfin un nombre à virgule.
00:25:02 :C'est un float, en fait.Là, le numérique dans SQL, c'est comme un float.Voilà.Ok, on est là.On exécute.On crée l'autre table.Ça, je vais le supprimer pour l'instant.
00:25:19 :Comme ça, il va la recréer.Et voilà.Insert.Et pour l'instant, on ne va pas insérer...En fait, le insert, il va être un petit peu obsolète,parce qu'il va falloir le modifier.
00:25:31 :Donc voilà.Et on va déjà tester, voir si ça fonctionne.Je vais lancer.Et qu'est-ce qu'il n'aime pas ?C'est la ligne 19.Il n'aime pas la virgule, comme ceci.
00:25:53 :Ok, donc là, on a notre database.Donc là, je vais resumer un petit peu pour vous.Vous voyez que maintenant, on a une database.Vous voyez, j'ai une database qui est toujours citydata.db.
00:26:11 :Et maintenant, j'ai deux tables.J'ai une table Paris Data et une table arrondissement.Si vous voulez, on va créer directement...Alors, pour la question de NOP46, tu voudrais quoi comme code ?
00:26:25 :Tu voudrais ce truc-là ?Je ne sais pas ce que ça va donner, là-dessus.Essayer d'y aller.Donc, on va essayer de trouver un code.
00:26:40 :Et là, on va essayer de créer un code.Et là, on va essayer de créer un code.Et là, on va essayer de créer un code.
00:26:46 :Et on va essayer de créer un code.Si tu en as besoin, essaye de copier ça.Mais je t'avoue que je ne sais pas ce que ça va donner.
00:26:52 :Je ne sais même pas s'il a tout pris.Non, il en manque une bonne partie, là.Ouais. Attends, je remets ça.Ouais, il ne prend pas tout.
00:27:06 :Ça va être un peu compliqué, désolé, pour la copie du code, là, en instantané.Il faudrait que je le mette sur GitHub, etc.Mais ça va prendre du temps.
00:27:18 :Je l'enverrai à la fin, désolé, NOP.Je l'enverrai à la fin.Non, ne t'inquiète pas, tu ne déranges pas, désolé.Mais en plus, le code, je le fais en live aussi.
00:27:35 :Donc, je t'avoue que pour l'instant, des fois, je ne suis pas sûr.Ouais, sur le Discord, je peux l'envoyer.Bonne idée.Il est où, le Discord ?
00:27:44 :Non.Je le mettrai après, parce que là, je pense que ça va être le bordel si je le mets comme ça.Où est-ce que j'en étais ?
00:28:05 :Ah oui.Donc là, maintenant, si je retourne sur mes databases.Donc là, normalement, j'ai deux tables sur ma database.Si je fais « select étoile from arrondissement »,normalement, je ne vais rien avoir.
00:28:32 :Donc, « select étoile », ça veut dire « sélecte-moi tous les champs qui sont dans arrondissement ».Moi, j'aimerais bien ajouter quelques valeurs dans arrondissement.
00:28:41 :Donc, on va dire, par exemple, on va ajouter l'arrondissement 12, sa latitude et sa longitude.Donc, on va le faire ici.On peut faire « insert into arrondissement ».
00:28:54 :On va dire « arrondissement number lat long », et on va dire « values », pardon.On va dire le douzième arrondissement, et après, donc là, j'avais récupéré le douzième.
00:29:17 :C'est 48, 84, je vais l'écrire comme ça.Et la longitude, voilà.Et donc, si j'exécute cette query-là,voilà.Et que maintenant, je fais un « select ».
00:29:47 :Voilà.Donc là, j'ai bien rentré un arrondissement, qui est le douzième, avec sa latitude et longitude.Et donc maintenant, tout l'enjeu, ça va être de réussir à faire le lien entre les deux tables.
00:30:14 :Voilà.Est-ce que c'est clair pour vous, ou est-ce que j'explique très mal et vous êtes paumé ?Ça peut très bien être le cas.Et est-ce que vous voyez aussi l'intérêt de faire ça ?
00:30:29 :Parce qu'en gros, ça veut dire que, imaginez que vous avez votre table ici, avec toutes les infos sur votre table.Vous ne voulez pas avoir une table avec, je ne sais pas combien, 25 colonnes,et vous ne voulez pas que l'info, elle se répète.
00:30:43 :Parce qu'en fait, par exemple, là, sur chaque entrée, vous allez avoir plusieurs fois l'arrondissement 12.Le douzième arrondissement, machin et bas.Vous n'allez pas vouloir qu'à chaque fois, vous ayez une colonne qui vous dit l'arrondissement 12,sa latitude s'étend, sa longitude s'étend, etc.
00:30:59 :Quand on fait de la base de données, on essaye un maximum de séparer les informations et les types d'informations.Parce que les requêtes, après, sont beaucoup plus puissantes et beaucoup plus performantes.
00:31:12 :Sinon, en fait, si vous avez une grosse table avec plein de colonnes,les requêtes que vous ferez dessus seront beaucoup moins performantes.Voilà, donc, maintenant, on va...
00:31:26 :Comment on va faire maintenant ?On va aller créer...On va d'abord commencer par créer toutes les entrées dans notre table d'arrondissement.Pour ça, il faut qu'on récupère, un petit peu comme ce qu'on avait fait,toutes les valeurs dans arrondissement.
00:31:44 :Donc, on va faire comme ça.On va se refaire une petite fonction qui récupère GetDataFromFile.Donc, là, on va dire GetDataFromFile.Def.Get.Arrondissement.Data.
00:32:07 :On va dire Data.File.Je mets toujours un retourneNone quand je crée une fonction.Voilà, donc là, je vais récupérer un petit peu ce qu'on avait déjà écrit.
00:32:24 :Je vais un peu réduire tout ça.On va juste garder celle qui nous intéresse.Voilà.Ça, je vais dégager.Ça, je dégage pour l'instant.Ça, je vais le mettre à droite, fonctionner à droite.
00:32:43 :Et voilà.Je vais commenter, ici, tout ça pour ne pas être gêné.Et voilà.Donc, on va dire.Arrondissement.FilePath.Égal.Et donc, là.Comment il s'appelle, notre fichier ?
00:33:13 :Il s'appelle.Arrondissement.OK.Et donc, notre fonction, comment on va faire ?Donc, Data.File.On va déjà aller voir la tronche de la data, si ça vous dit.
00:33:40 :Donc.Ah, merde.Je n'ai pas installé.J'aime bien installer Hippiton à chaque fois.Mais quand vous installez Hippiton, il faut quitter et revenir.Voilà.Hippiton.
00:34:06 :Je vais essayer de zoomer un peu, mais bon.J'essaye de ne pas trop zoomer, parce qu'après, moi, je ne vois plus rien.Voilà.Donc, on est là.
00:34:16 :Donc, on va dire.Arrondissement.Data.Donc, c'est Get.Arrondissement.Data.Arrondissement.FilePath.On run.Non, c'est quoi ça ?Retourne None.Retourne None.Donc, il ne risque pas d'arriver grand chose.
00:34:46 :Voilà.Donc, si je vais voir.Arrondissement.Data.Voilà.On a un truc comme ça, qui n'est pas ouf.Donc, en fait, ce qu'on récupère, c'est une liste avec.
00:35:02 :Pourquoi je n'ai pas l'arrondissement ?Ah oui, parce qu'ici, j'avais mis ça.Donc, en fait, vous voyez, il faut tâtonner un petit peu quand vous faites de la lecturecomme ça de fichiers.
00:35:12 :Donc, on se récupère comme ça.Nous, tout ça, on s'en fiche.Donc, il va falloir qu'on découpe un peu.Donc, on va dire.Par exemple, on va regarder sur le premier élément.
00:35:24 :Donc, Line 1.Ça, c'est un exercice que vous aurez souvent à faire.C'est un peu faire le.En gros, faire un clean de vos datas.
00:35:34 :Donc là, on va dire Line 1, c'est arrondissement.Data.Zéro.Donc, Line 1.Voilà.Donc là, moi, comme vous le savez, dans ma database,si je vous remonte la tête de la database,vous voyez qu'ici, je vais avoir arrondissement number, latitude, longitude.
00:35:52 :Donc, il va falloir que je me débrouille pour extraire,depuis cette chaîne de caractère-là, le numéro de l'arrondissement.Donc, ça va être ce petit morceau-là et latitude ici et longitude ici.
00:36:03 :Est-ce qu'il y en a qui veulent, je ne sais pas, proposer une idéeou est-ce que vous voulez que je le fasse ?C'est un peu le même exercice qu'on a fait la dernière fois,mais si quelqu'un veut proposer quelque chose, c'est avec plaisir.
00:36:17 :Allô ?Ouais.Je pense qu'on utilise le même approche que pour l'ancienne database.Donc, en fait, dans le même fichier, on peut créer la première table,qui est, comment dirais-je, la première table des dataset puis on ajoute les arrondissements.
00:36:50 :Ouais, exactement.Mais en fait, là, mon objectif, c'est de…parce que ce que je veux, moi, c'est remplir la table des arrondissements.Donc, pour remplir la table des arrondissements,il va falloir que je cligne un petit peu ma data ici,que je récupère arrondissement 1, latitude et longitude.
00:37:09 :Donc, il faut bien que je découpe un petit peu ici.Et donc, ce que je disais, c'est, pour vous aider un petit peu,tu vois, je pourrais faire…si je fais un split, par exemple,split, en fait, ça permet de découper une chaîne de caractèresen une liste avec deux éléments.
00:37:27 :On n'a pas des regex dans Python ?Si, on a des regex.On pourrait très bien utiliser des regex.Mais c'était juste…Oui, oui.On peut montrer autre chose, si tu veux montrer autre chose.
00:37:43 :Ah non, non, pas du tout.On peut essayer.Donc, pour les regex, il faut importer RE.RE, OK.Ouais.Après, je ne suis pas un champion de la regex.
00:37:51 :J'avoue que ce n'est pas toujours…Ouais, ben, donc, viens, on fait avec le truc.Et puis, ça sera à nous de proposer une solution.Ouais, mais attends, avec la regex,on peut peut-être essayer au moins d'aller chercher la latitude et la longitudeparce qu'on voit que le schéma ici se récupère.
00:38:05 :Mais bon, je pense que je vais mettre un temps fouet essayer de faire la regex.Donc, j'avoue que je pense qu'on va essayer de faire un truc plus simple.
00:38:14 :Donc là, pour l'instant, vous voyez,en faisant un split, on arrive déjà à découper les différents trucs.Ça serait bien ici qu'on arrive…Donc là, vous voyez, en fait, j'ai découpé.
00:38:27 :On a un côté, on a le numéro de l'arrondissement.Et d'un autre côté, on a juste un élémentdans lequel il y a la longitude et la latitude.
00:38:39 :Donc, il faudrait après, maintenant, découper ce terme-làpour en avoir un troisième.Ouais, exactement, très bien.Donc, en fait, ce qu'il faut, c'est que je découpe le deuxième termeet que je lui mette un split, comme ça.
00:38:57 :Donc là, effectivement, le troisième G, j'aurai bien mes trois termes.Donc là, on va refaire.Donc, je vais l'appeler clean, égal.Donc, en fait, on va se mettre un premier termequi est ici quand je découpe une première fois.
00:39:13 :Quand je découpe une première fois, il faut que je prenne le premier terme.Et sur le deuxième terme que j'aurai découpé, qui est ici,on va se mettre...
00:39:28 :Je vais l'éclater ici, comme ça.Ça, est-ce que ça peut marcher ?Ouais, ça peut marcher.Je ne sais pas si vous avez vu, mais j'ai utilisé ici l'unstacking.
00:39:48 :Parce qu'en fait...Vous voulez que j'aille plus loin en détail là-dessus ?Ou pas grave, parce que c'est un truc un peu...Oui, moi, je ne savais pas bien comprendre l'unpacking là.
00:40:00 :Ouais.Donc, en fait, là, c'est vraiment ce qu'on appelle de l'unpacking.Parce que ce que je lui dis, c'est que je suis en train de créer une liste.
00:40:09 :Donc là, vous voyez, quand je fais un split, deux points,il me sort deux éléments.Moi, ce que je vais mettre dans ma liste,c'est le premier élément, le deuxième, le troisième.
00:40:20 :Donc ici, je crée une liste qui s'appelle Cleaned.Je lui mets le premier élément de ce résultat-là.Donc c'est pour ça, ici, celui-là.Celui-là, normalement, c'est bon.
00:40:31 :Ensuite, vous voyez ici que quand je prends le deuxième élément,ici, Lean Split,donc en gros, je me retrouve sur cet élément-là,si je lui réapplique un split avec la virgule,vous voyez que je me retrouve avec une liste, ici, à deux éléments.
00:40:47 :Et donc c'est pour ça, ici, que je fais de l'unpacking,c'est-à-dire qu'une fois que j'ai réussi à avoir ça,la petite étoile, ici, ça veut dire que tu unpackes,donc en fait, tu déballes cette liste-là.
00:40:59 :Et c'est comme ça que vous pouvez créer facilement, directement, une liste,comme ça, avec trois éléments depuis un premier truc.Donc, l'unpacking veut dire, parce que là, c'est une nouvelle liste,donc ça rajoute sur la première liste.
00:41:18 :Exactement, en fait, si tu fais juste l'unpacking,tu ne peux pas unpacker ici.Si on n'avait pas l'unpacking, si on n'avait pas le star,ça allait créer une nouvelle liste.
00:41:34 :Exactement, ça aurait...Ben, regarde, ça fait ça.Si je ne mets pas l'unpacking, il va me créer une liste de listes.Vous voyez, il me met une liste, et après, il m'imbrique une autre liste.
00:41:46 :Exactement, ok.Et donc, le fait de mettre la petite étoile, ça fait un unpack.D'accord, ça marche.Donc, on est là, on est à Cleanse.
00:41:57 :Qu'est-ce qu'il nous reste à faire, maintenant ?Sur celui-là, j'ai l'impression qu'il y aura toujours un espace sur le premier mot.Donc, en fait, le Cleanse 0, je vais lui faire un AirSplit.
00:42:14 :AirSplit, en fait, c'est pour dire dégage-moi tous les espaces.Ok ?Donc, on va s'en sortir comme ça, et ensuite, le AirSplit.Qu'est-ce qu'on va vouloir ?
00:42:27 :Qu'est-ce qu'on peut faire ?Parce que là, j'ai, par exemple, pour 13.En fait, il va suffire que je prenne le premier terme de mon AirSplit,et en plus, je prends...
00:42:44 :En fait, il faut faire une petite condition, un peu comme la dernière fois.Le premier terme, il faut le... Enfin, le premier arrondissement,il faudra le traiter à part, parce qu'il y a le ER, vous savez.
00:42:56 :Sinon, je pourrais carrément l'enlever de mon fichier, mais bon, voilà.Donc, en fait, si, par exemple, je faisais ça, on récupère ce qu'il faut.Et pareil pour ici, ce qu'on va faire, c'est, si je vais dans Clean 1,et que je fais un AirSplit, on récupère comme ça.
00:43:22 :Ensuite, il faut récupérer...Plutôt que le AirSplit, tu ne peux pas directement splitter au niveau du...Alors, je vais dire température, parce que je ne sais pas comment ça s'appelle, ce petit symbole.
00:43:33 :Et tu as exactement la même chose sur le deuxième aussi, sur la longitude.Ouais, bonne idée. Donc là, j'ai là-dessus.Donc, toi, ce que tu ferais, c'est que tu ferais un split directement...
00:43:43 :Attends, si je regarde le Clean...Toi, tu ferais un split sur le petit signe ici, là.Voilà, un petit split sur le petit signe ici.
00:43:51 :Et comme ça, tu auras juste à récupérer à chaque fois le premier truc.Pour les deux...Ok, on va voir.Ah, il me fait chier avec la saisie automatique.
00:44:02 :Pour un split, donc on va faire ce petit truc-là.Ah ouais, ouais, très bonne idée. Et après, on prend le premier.Et il y aura exactement la même chose sur les aimants 2.
00:44:14 :Ouais, et je pense qu'après, je peux même refaire un AirSplit pour enlever l'espace,sinon je prends juste...Tu vois, là, on a 0. Je peux prendre à partir du premier caractère, comme ça.
00:44:29 :En fait, ça, ici, ce que je fais... Est-ce que vous connaissez tous ça, cette notation-là ?Le slicing, ouais, ouais.Ouais, c'est du slicing.Donc, en fait, là, ça veut dire que je prends à partir du premier terme...
00:44:41 :Enfin, du premier terme, de 1, donc du deuxième terme, jusqu'à la fin.Donc, où est-ce qu'on en est ?Où est-ce qu'on en est ? Je regarde comment on avait fait la dernière fois.
00:44:58 :DataToStore, ouais.Bon, on va regarder, on va y aller petit à petit,on va pas tomber dessus du premier coup, je pense, mais...DataToStore égale, comme ceci,et donc, for lm in data...
00:45:19 :Je crois qu'on avait stocké avec un tuplé...Ouais, on avait fait un tuple.Alors, on va sortir num...arrondissement égale.Donc, il faut d'abord... Où est-ce qu'on en était ?
00:45:47 :On va splitter là-dessus.Alors, on splitte là-dessus, donc...lm.split, on prend le 0.En fait, je vais le faire en plusieurs étapes, comme ça, ce sera plus simple.
00:46:07 :Arrondissement, ensuite, lat.On a dit que c'était...On a dit que c'était ça, donc on va faire lm.Le 0, c'est lat ou longitude d'abord ?
00:46:30 :Je ne sais plus exactement.Lat et longitude.Ensuite, je duplique, donc lat.Long, et ici, c'est 1.Et donc, on va dire ensuite...DataToStore.happen.Donc, happen, c'est pour rajouter dans une liste.
00:46:56 :Et donc, là, on va stocker le tuplé.Arrondissement, lat, et longitude.Et on va juste sortir DataToStore.Et on va déjà aller voir où est-ce qu'on en est avec ça.
00:47:13 :Donc, run, create.Comment je l'ai appelé ?Arrondissement, data, voilà.Donc là, on commence un petit peu à y être.On va utiliser maintenant ce qu'on nous a proposé.
00:47:30 :Je ne sais plus qui c'est qui a vu cette idée.Désolé, mais on va appliquer ça.Donc, ça veut dire que pour numArrondissement,on va le transformer, et on va dire...
00:47:43 :numArrondissement.erclit.Et on prend le premier.On va voir déjà ça.Où est-ce qu'on en est ?Voilà, on commence à voir les choses venir.Premier.
00:48:05 :Et en fait, ce qu'on va faire, c'est que si c'est le premier arrondissement,on va dire if numArrondissement==premier.On va juste dire numArrondissement==1.On ne va pas s'embêter.
00:48:23 :On va dire qu'en fait, on prend tout sauf le dernier terme.On va dire numArrondissement.Ça vous voit si on fait comme ça ?Oui, ça va.
00:48:34 :Et donc, on va dire numArrondissement.On prend tout sauf le dernier.Donc là, en fait, on fait du slicing, mais dans l'autre sens.Alors, OK.
00:48:49 :Donc, ça a l'air de bien marcher.Vous voyez qu'on a ce qu'il faut.On ne peut pas oublier de le transformer en float.Vous voyez, en fait, ça, c'est un truc que je vous conseille de fairequand vous codez.
00:48:58 :C'est d'y aller petit à petit.Il ne faut pas essayer de tout faire d'un coup.Après, ce n'est pas compliqué.Pourquoi j'ai mis un truc ?
00:49:03 :Moi, c'est un int.Voilà.Donc là, on a nos arrondissements.Et maintenant, on va refaire ce qu'on nous a proposé.Donc, on va dire, je vais créer une petite fonctionparce qu'en fait, ça va être la même chose à chaque fois.
00:49:21 :Il ne faut jamais faire deux fois la même chose dans Python.Donc, on va se faire ici une petite fonction.À l'intérieur de la fonction, ce n'est pas grave.
00:49:29 :Def.Clean.Lat.Long.Et donc là, on va dire ma chaîne de caractères.Quand on m'envoie une chaîne de caractères,qu'est-ce que je fais avec ?
00:49:41 :Et donc là, on va dire retourne.Pour l'instant, c'est non.Et donc, ma chaîne de caractères,on lui fait un split.Égal.Point split.Donc là, c'était ça.
00:50:03 :Et on prenait le zéro.Voilà.N'hésitez pas à m'interrompre si vous ne comprenez pas pourquoi on fait ça.Mais en fait, vous allez voir que ça veut dire qu'ici,au lieu d'écrire deux fois la même chose,je vais juste appeler deux fois ma fonction.
00:50:19 :Donc là, on va dire latégal...Comment je l'appelais ma fonction ?Clean.Et je vais mettre un underscorepour dire que c'est vraiment une fonction interne.
00:50:30 :C'est juste une convention.Clean.Lat.OK.Je duplique l'instruction.Et...Longitude.On va voir où est-ce que ça nous mène tout ça.Ben voilà, on est presque bien là.
00:50:59 :Il n'y a plus qu'à virer, à prendre que,comme ce qu'on a dit tout à l'heure,le premier jusqu'à la fin,et de transformer ça en float.
00:51:10 :Et voilà.On a tout transformé.Pourquoi l'underscore ?En fait, l'underscore, c'est plutôt une convention,parce que c'est une fonction un peu...Tu vois, j'aurais pu définir une fonction anonyme directement.
00:51:30 :C'est juste pour moi me rappeler que ce n'est pas une fonctionque j'utilise à l'extérieur de cette fonction-là.C'est vraiment un truc interne.Je pense que tu as oublié aussi le R-splitau niveau du longitude et latitude.
00:51:42 :Le quoi ?Le R-split.Parce qu'il y a l'espace au longitude.Oui, mais je crois que c'est bon là.Il me l'a fonctionné.Tu vois, là, c'est bien un float.
00:51:53 :Si je regarde...Ok, ok.Après, si on prend la dernière des avantes,il y a l'espace.Je pense que c'est de l'espace là, en fait.
00:52:05 :Non, parce qu'en fait, ici, quand j'ai fait un point,j'ai pris à partir du deuxième terme.Ok, ok.Ça marche.Voilà.Donc là, on a tout ce qu'il faut.
00:52:19 :On va faire un def insert into db arrondissement.Et on va mettre directement la data to store ici.On va pas s'embêter à le faire directement.
00:52:43 :Et donc là, on va...Je vais recopier ça un petit peu.Et donc là, pour répondre à une question qu'il y avait tout à l'heure,je crois que c'était Jean-Phi ou Simon.
00:53:11 :Pourquoi, en fait, j'écris du SQL dans Python ?C'est justement...Vous voyez, tout ce qu'on vient de faire là,c'est pour faire des boucles, etc.,
00:53:21 :qu'on pourrait difficilement faire avec SQL.Et en fait, ça permet de paramétriser les requêtes, etc., qu'on va faire.Donc là, imaginons qu'on a...Pourquoi Connexion ne veut plus me le faire ?
00:53:36 :Ah, oui.OK, donc là, je crée ma connexion avec ma database.Et donc là, on est là.Forteplay in tqdm data to store.Donc là, ça va être into...
00:54:09 :Comment je l'avais appelé ?Arrondissement.Arrondissement, OK.ID, on ne va pas le mettre parce que...Il faut que je récupère un petit peu les noms.
00:54:30 :On était...Arrondissement.Comment je l'ai écrit, moi ?Je vais récupérer ici comment je l'ai écrit.Arrondissement number.Arrondissement number.Ensuite, lat et long value.
00:55:14 :Tuplé.Et donc là, celui-là, on ne l'a pas.Je vais supprimer ça pour être sûr qu'il me la refasse bien.Il n'y a pas d'entrée de la virgule, je crois.
00:55:27 :Ah oui, bien vu, à chaque fois que tu me fais avoir avec ça.Très bien vu.Merci.OK, donc je pense que là, on va être bon.
00:55:38 :Je vais dézoomer un peu juste pour voir où est-ce que j'en suisparce que là, je suis un peu perdu.Donc là, on a create database.
00:55:45 :Get arrondissement data.OK, donc on a la database.On crée la database.Arrondissement value pass.Et on va faire insert into DB arrondissement database pass nameet l'arrondissement data.
00:56:07 :OK, donc là, pour l'instant, je ne vais juste pas le fairejuste pour qu'il crée bien la database.Donc là, il m'a créé la database.
00:56:18 :Elles sont vides et je vais décommenter çapour qu'il me la crée.Je vais zoomer un peu pour que vous voyez.Si je lance, alors.
00:56:33 :Qu'est-ce qu'il dit ?Has no column long.OK, parce que j'ai du mal à l'appeler.Je crois que tu l'avais appelé long.Ah oui, comment je l'ai appelé ?
00:56:46 :Arrondissement.Lat long, effectivement.On y retourne.Super, ça a marché.Maintenant, si je vais voir là-dessus et que je vais...Je vais aller faire une requête là-dessus.
00:57:10 :Open database.Donc là, vous voyez, grâce à ça...Je vais aller dire New Query.Donc là, en fait, il me l'a fait directement de base.
00:57:22 :Mais moi, je peux même faire Select from arrondissement.Je run.Et donc là, il me sort bien tous les arrondissements.Et donc, ce qui est pas mal avec les requêtes SQL,c'est que vous pouvez filtrer très rapidement.
00:57:38 :Vous pouvez dire, sors-moi tous les arrondissementsdont la latitude est supérieure à 4.86, par exemple.Donc, il suffit de faire Select from arrondissement.Where, en fait, en anglais, c'est où.
00:57:59 :Where lat est plus grand que 48.6.OK, si je lance...On va mettre 48.86.Là, vous voyez que j'en ai moins.Et puis, si je mets 48.88...
00:58:27 :Voilà, ça permet de faire des tris rapides.Ah oui, merde.Il y avait le TOSA après, il n'hésitait pas à partir.C'est pas grave, je n'avais pas vu qu'il était déjà à 21h.
00:58:47 :Désolé.Donc là, on a notre database avec les arrondissements.Où est-ce qu'on en est maintenant ?On peut enregistrer.Maintenant, il va falloir qu'on modifie un peu la databasequi permet de renseigner les infos.
00:59:06 :Pour ça, il va falloir le faire en deux temps.Vous voyez ici, quand on faisait...Donc là, si je récupère...I pass name...Data to store...
00:59:23 :En fait, il va falloir qu'on modifie un petit peu.Donc ça, je l'avais modifié déjà, je crois.Si je vais voir dans City Database et que je vais dans Paris Data,on a bien arrondissement...
00:59:36 :Ça, c'est quoi ?Arrondissement ID...Donc ici, dans arrondissement ID...En fait, à chaque...Il va falloir aller récupérer l'ID avant d'insérer.Vous voyez ici qu'on a là-dessus.
01:00:10 :On va vouloir aller...L'ID, il va falloir aller le chercher dans la table arrondissement.Parce qu'en fait, une fois qu'on aura...Vous voyez ici, dans notre database initialement...
01:00:24 :Je vais aller voir dans Data to store plutôt.Vous voyez ici que si je lance ça...Run... Create...Si je vais voir Data to store...
01:00:45 :En fait, ce que je veux stocker, c'est cette information-là.Mais je ne veux pas le stocker comme ça dans ma database.Ici, c'est le cinquième arrondissement.
01:00:56 :Il va falloir que j'aille chercher dans la databaseà quel ID correspond le cinquième arrondissement.Pour ça, on peut aller faire...On retourne là-dessus, dans arrondissement...
01:01:08 :New query...Là, on va faire Select ID...Select ID from arrondissement...Where arrondissement number égale, par exemple, 5.Là, en fait, il va me donner l'ID.
01:01:31 :Donc, c'est ID...Pourquoi il me dit 8 et 5 ?Parce qu'en fait, il les a ajoutés plusieurs fois, ce con.Il a reproduit la table.
01:01:40 :Mais en gros, ça, ça me permet d'aller chercher l'IDque je vais renseigner.Ici, ça veut dire qu'au lieu d'aller renseigner,il va falloir que je fasse une requête.
01:01:59 :Ici, je vais devoir aller chercher...Pour tupler, on va dire...Arrondissement number égale...En fait, je vais devoir faire une autre...Ça va être un peu long, je pense.
01:02:17 :Je ne vais pas le faire tout de suite.Je voulais vous montrer un autre petit trucsi ça vous intéresse, avec Docker et MySQL.Mais en gros, peut-être comme ça,vous pouvez y réfléchir aussi, si vous voulez,pour la prochaine fois.
01:02:29 :En fait, ce qu'il va falloir faire,c'est qu'à chaque numéro d'arrondissement,il va falloir aller savoir à quelle IDça correspond dans l'autre tablepour pouvoir le renseigner dans la database.
01:02:41 :Allo ?Oui ?C'est pour remplir la table paridata, c'est ça ?Oui, c'est ça.Parce qu'en fait, maintenant, dans notre table paridata,ici, ce n'est plus un arrondissementqu'on doit rentrer.
01:02:55 :C'est l'enregistrement dans l'autre table.Là, il doit faire de la table arrondissement.Exactement.Parce qu'après, quand on fait les jointures,ça se fait sur les IDs.
01:03:05 :Pour faire les filtres.Exactement.Pour faire les jointures, etc., les requêtes.Donc ça, c'est ce qu'on fera la prochaine fois.Vous pouvez réfléchir un petit peu.
01:03:15 :Et si ça vous intéresse,je peux vous montrer un petit truc sur Dockerpour faire une database MySQL rapidement.Si ça vous intéresse.Si ça vous intéresse.
01:03:24 :Sinon, je vous montre ça la prochaine fois.Oui, je pense qu'on peut le faire.OK.Parce qu'on a un petit peu dépassé le temps, mais bon.
01:03:33 :Alors.C'est fini ?J'ouvre Docker.Voici les Dockers.Pourquoi il ne s'ouvre pas ?Je vais le quitter ici.OK.On va rouvrir.Voilà.J'ouvre Docker.
01:04:03 :Et en fait, je vais aller chercher.Je vais tout supprimer.Comme ça, vous verrez comment ça fonctionne.On peut aller ici.Donc dans Docker Desktop.
01:04:18 :Donc, on va aller ici.Vous pouvez aller ici.Donc, dans Docker Desktop.Ça existe sur Windows.Sur macOS.Et je pense que ça existe aussi sur Linux.
01:04:31 :Vous pouvez dire.OK.Je voudrais une image de SQL.Donc, vous faites ici.Vous allez chercher MySQL.Donc là, il vous trouve.Vous dites OK.
01:04:41 :Cool.Donc, en fait, c'est un peu comme Git.Ça veut dire que vous récupérez l'image Docker 2du serveur MySQL.OK.Donc là, il est en train de charger.
01:04:53 :OK.Donc là, maintenant, vous avez l'image.Vous pouvez aller dessus.Et vous dites lancer l'image.Vous mettez quelques settings.Parce qu'en fait,donc là, on met le port mapping.
01:05:03 :Ça, je ne vais pas rentrer dans le détail.Mais en fait, c'est pour dire qu'il crée un tunnelentre le port qui va être sur l'image Dockeret le port de votre ordinateur à vous.
01:05:14 :Parce que sinon, vous ne pourrez pas y accéder.En fait, le principe de Docker,c'est de faire des environnements isolésdans votre machine.Typiquement, si vous voulez tester un logicielet que...
01:05:24 :Bonne soirée, Edouard.Et que vous voulez tester des chosessans endommager votre ordinateur,vous utilisez une image Docker.C'est un container.Il n'y a rien qui peut sortirsi vous ne l'autorisez pas.
01:05:36 :Et on va lui mettre...Donc, vous voyez que déjà, si je fais ça,il va m'indiquer qu'il y a un problème.Vous voyez, il me dit,quand on définit un serveur MySQL,il faut mettre un password.
01:05:48 :Donc là, on va dire...Je vais mettre MySQL root password.Je vais le définir ici directementdans les variables d'environnement.Donc, en plus de là,306.
01:05:58 :Et ici, dans les variables d'environnement,on va dire root.En fait, ça, environnement variable,c'est comme on crée un environnement Docker.C'est comme si c'était une machine virtuelle.
01:06:09 :Et là, on est en train de lui définirune variable d'environnement pour la machine.Donc, comme si, vous voyez,on fait un exportou on le met dans le pass d'environnement.
01:06:18 :C'est normal que le host port que tu as noténe soit pas le même qui soit noté ?Effectivement, ce n'est pas normal.Après, je pourrais très bien mettrecelui que je veux.
01:06:29 :C'est juste ici.Ça veut dire que3306, c'est le port du container.Et toi, tu dis,je veux que tu me fasses un lienentre le port du container et le port ici.
01:06:42 :D'habitude, on met toujours le mêmepour ne pas s'y perdre.Parce que tu vois ça, le port,c'est un port classique de MySQL.Mais je pourrais très bien mettre ici60, 67, 66, celui que je veux.
01:06:55 :C'est juste que je définisà quel port j'associecelui du container.Donc là, effectivement,c'est bien de mettre le mêmepour ne pas s'y perdre.
01:07:07 :Et on a défini notre variable d'environnement ici.Et donc là, je lance.Donc là, il est en train de m'initialisertout ce qu'il faut.Voilà.
01:07:17 :Et maintenant, si je vais dans container,vous voyez qu'ici, j'ai un containerqui a donné un nomautomatiquement random.Vous pouvez ici aller faire un clic droitet vous dites Open in Terminal.
01:07:29 :Donc là, en fait,je suis dans une invite de commandedans un terminalà l'intérieur de mon container.Et donc maintenant, je peux faire MySQLpour dire que je vais me connecteravec un password.
01:07:42 :Et donc là, je suis vraimentsur un serveur MySQLdepuis ma machine.Donc c'est quand même assez intéressantparce que vous pouvez avoir un serveur MySQLdirectement dans votre localsans mettre en place un serveur, etc.
01:07:56 :Et donc maintenant,si je fais des commandes MySQL,je dis Show Database.Voilà, j'ai les différents databases.Je peux faire maintenant unCreate Database,on va dire Dock String.
01:08:11 :OK. Maintenant, si je faisShow Database, j'ai Dock String.Je peux dire Use.C'est un peu comme ce qu'il y asur la formation.Use Dock String.
01:08:21 :Donc maintenant, je peux direje n'ai pas de table.Si je fais Show Tables,je n'ai pas de table.Donc je peux faire Create Table.
01:08:34 :On va dire, je ne sais pas, Students.Avec Students.Et il faut que je lui définissecomment on a défini ici dans le SQLite.Il faut juste mettre le nom.
01:09:01 :Après, on peut mettre exactementInteger.Le Name, on va dire que c'est un Varchar.Qu'est-ce qu'il me dit ?J'ai un problème.Je vais mettre un texte.
01:09:23 :Ouais, Sylvain, je t'écoute.J'aimerais savoir,par notre base de données qu'on a créée avec Python,on peut créer la base de données sur Dockeret le connecter dans notre script Python ?
01:09:38 :Ouais.En fait, ici, quand tu fais une connexion,là, tu te connectes avec ta base de données SQLitevia ce petit module.Si tu voulais te connecter à une base de données MySQL,c'est un autre module.
01:09:54 :Tu vois, c'est import MySQL.connector.Et en fait, ici, ta connexion,au lieu d'être un truc SQLite 3,ce serait MySQL Connector.En fait, le Docker, par exemple,on crée la base de données dans le Docker.
01:10:13 :Par notre base de données qu'on a créée ici,j'ai oublié comment...Notre base de données qu'on a créée ici avec Python,on crée la même base de données dans le Docker.
01:10:26 :Ça se dit physiquement dans le Docker,avec tous les champs, machines, tables,et on lit cette base de données à notre projet Python.Ça peut être un Django ou...
01:10:38 :Ouais, on pourrait.Et en fait, ce qui est bien avec MySQL,c'est que c'est une base de données en mode serveur.Donc si, par exemple, tu fais cette base de données-làsur un serveur AWS ou je ne sais pas quoi,tu peux accéder à ta base de donnéesdepuis Internet, depuis n'importe où.
01:10:53 :Là, ma base de données SQLite,SQLite, c'est un fichier,donc c'est juste un fichier local que j'ai sur mon PC.Je ne peux pas le mettre en mode serveur.
01:11:01 :Je ne peux pas y accéder depuis une APIou des choses comme ça.OK, d'accord.En fait, c'est ça.C'est-à-dire, par exemple,ce type de data-là,on le crée peut-être dans le Dockeret avoir toutes les données là-bas.
01:11:13 :Puis on fait la liaison des points dans le Docker.Ouais, c'est ça.OK.Voilà.Bon, c'était un petit peu…En fait, on a passé pas mal de tempssur travailler sur le fichier, etc.
01:11:29 :là, avec le petit slicing,mais bon, je pense que c'est toujours intéressant.Et…Et voilà, la prochaine fois,je ne sais pas si…ce que vous voulez faire la prochaine fois,n'hésitez pas à demander des chosessi je peux vous aider.
01:11:50 :Oui, je pense qu'on va essayer de…sur la Discord.Ouais, sur Discord, vous pouvez mettre.Des fois, il y en a qui mettent des petites suggestions,des sujets.
01:12:00 :J'essaie de vous montrer.J'essaierai peut-être la prochaine foisde vous montrer Grafana,un truc qui permet de faire des graphset des dashboards interactifsdepuis des bases de données.
01:12:09 :Voilà.Après, si vous voulez voir des chosesqui sont beaucoup plus débutantes, etc.,aussi, n'hésitez pas à le dire.Ouais, je ferai un truc un peu plus…un peu plus débutant la prochaine fois,Axel.
01:12:25 :Bon, ben, voilà pour ce soir.OK, merci.Merci, Pierre.Merci à vous tous.Et puis, à bientôt.Allez, ciao.Bonne soirée à tous.Merci, ciao.
01:12:42 :Bonne soirée.Sous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-CanadaSous-titrage Société Radio-Canada
Aucune occurrence trouvée pour « ».