# kodkod | Cours d'introduction > Introduction Full Stack – 5 semaines : l'ordinateur, le système d'exploitation et les réseaux, Python professionnel, le débogage et Git, la POO, le backend et les bases de données - [Politique de confidentialité et conditions d'utilisation](https://intro-kodkod-6.nm-ambition.com/fr/privacy/): Ce site est réservé aux étudiants du cours — ne transmettez pas le lien à d'autres personnes. Notre politique de confidentialité est également expliquée ici. - [Chat du cours](https://intro-kodkod-6.nm-ambition.com/fr/chat/): Un chat de groupe commun à tous les apprenants du cours - [Connexion](https://intro-kodkod-6.nm-ambition.com/fr/login/): Connexion au site du cours - [Inscription](https://intro-kodkod-6.nm-ambition.com/fr/signup/): Inscription au site du cours - [Mon profil](https://intro-kodkod-6.nm-ambition.com/fr/profile/): Votre nom, votre description et votre couleur dans le chat du cours - [Nouveau mot de passe](https://intro-kodkod-6.nm-ambition.com/fr/reset-password/): Choisir un nouveau mot de passe pour votre compte - [Réinitialiser le mot de passe](https://intro-kodkod-6.nm-ambition.com/fr/forgot-password/): Demander un lien de réinitialisation - [Cours d'introduction Kodkod](https://intro-kodkod-6.nm-ambition.com/fr/docs/): Introduction Full Stack : l'ordinateur, le système d'exploitation et les réseaux, Python professionnel, le débogage et Git, la POO, le backend et les bases de données ## Cours d'introduction Kodkod > Introduction Full Stack : l'ordinateur, le système d'exploitation et les réseaux, Python professionnel, le débogage et Git, la POO, le backend et les bases de données - [Installations](https://intro-kodkod-6.nm-ambition.com/fr/docs/installations/): Tout ce que vous installez dans le cours : Python, VS Code, Git et Docker dès le premier jour, comment vérifier que tout fonctionne, et ce qui s'ajoute plus tard. Un thème pratique et théorique, sans code. - [L'ordinateur et le système d'exploitation](https://intro-kodkod-6.nm-ambition.com/fr/docs/computer-and-os/): L'environnement de travail et le terminal, comment un ordinateur est construit et comment un programme s'y exécute : composants matériels, types de langages de programmation, le système d'exploitation, les processus, les fichiers et les permissions. Un thème théorique. - [Les réseaux et Internet](https://intro-kodkod-6.nm-ambition.com/fr/docs/networking/): Comment les ordinateurs communiquent entre eux : client-serveur, adresses IP, ports et DNS, le modèle en couches et les protocoles, et ce qui se passe dans le navigateur. Un thème théorique. - [Python professionnel, code propre et débogage](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-clean-code/): Les noms et les petites fonctions, DRY/KISS et la séparation des responsabilités, les bugs, la stack trace et un processus de débogage méthodique. - [Exceptions et journalisation](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/): La gestion des erreurs avec try/except/else/finally, la levée d'erreurs avec raise, et l'enregistrement de ce qui se passe dans un programme avec logging — y compris dans un fichier. - [Git et GitHub](https://intro-kodkod-6.nm-ambition.com/fr/docs/git/): Le contrôle de version : pourquoi on en a besoin, les commandes Git de base, et le travail avec GitHub grâce à push. - [Structures de données et fonctions](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/): list, tuple, set et dict, le slicing et la mutabilité, les fonctions avec args/kwargs/lambda, la portée (LEGB), et les fonctions avancées : fonctions pures, fonctions d'ordre supérieur, nonlocal et décorateurs. - [Modules, fichiers et JSON](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-modules-files/): Découper le code en modules et en packages, travailler avec des fichiers texte et with, et enregistrer et lire des données en JSON. - [POO – programmation orientée objet](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/): Classes et objets, état, encapsulation et property, héritage et polymorphisme, et conception orientée objet — du problème à un système complet. - [Backend et FastAPI](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/): Ce qu'est un backend, les méthodes HTTP et les codes d'état, path/query/body, la mise en place d'un premier serveur avec FastAPI, et le middleware qui s'exécute à chaque requête. - [Bases de données et MySQL](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/): Ce qu'est une base de données, MySQL dans un conteneur Docker avec une interface dans VS Code, la création de tables et les requêtes, et des opérations CRUD complètes depuis Python. - [API des étudiants – un serveur avec une base de données](https://intro-kodkod-6.nm-ambition.com/fr/docs/students-api/): Connecter les routes à la base de données, une API des étudiants avec un CRUD complet, et les tests avec Swagger. ### Installations > Tout ce que vous installez dans le cours : Python, VS Code, Git et Docker dès le premier jour, comment vérifier que tout fonctionne, et ce qui s'ajoute plus tard. Un thème pratique et théorique, sans code. - [Installations : tout ce que vous installez dans le cours](https://intro-kodkod-6.nm-ambition.com/fr/docs/installations/01-installations/): Tous les outils que vous installez dans le cours — Python, VS Code, Git et Docker dès le premier jour, et ce qui s'ajoute plus tard — à quoi sert chaque outil, comment l'installer pas à pas et comment vérifier que tout fonctionne. ### L'ordinateur et le système d'exploitation > L'environnement de travail et le terminal, comment un ordinateur est construit et comment un programme s'y exécute : composants matériels, types de langages de programmation, le système d'exploitation, les processus, les fichiers et les permissions. Un thème théorique. - [L'environnement de travail : le terminal et un premier fichier de code](https://intro-kodkod-6.nm-ambition.com/fr/docs/computer-and-os/01-dev-environment/): La ligne de commande — terminal, shell et commandes de base — le dossier de travail du cours, et ce qu'est un fichier de code et comment l'exécuter. - [Comment fonctionne un ordinateur : composants, exécution d'un programme et langages de programmation](https://intro-kodkod-6.nm-ambition.com/fr/docs/computer-and-os/02-how-computers-work/): Les composants de l'ordinateur (CPU, RAM, stockage, registres), ce qui se passe entre le lancement d'un programme et son exécution, et les types de langages de programmation. - [Le système d'exploitation : le noyau, les processus, les fichiers et les permissions](https://intro-kodkod-6.nm-ambition.com/fr/docs/computer-and-os/03-operating-system/): Ce que fait le système d'exploitation et ce qu'est le noyau, un programme face à un processus et la gestion de la mémoire, et le système de fichiers, les utilisateurs et les permissions. ### Les réseaux et Internet > Comment les ordinateurs communiquent entre eux : client-serveur, adresses IP, ports et DNS, le modèle en couches et les protocoles, et ce qui se passe dans le navigateur. Un thème théorique. - [Les réseaux et Internet : client-serveur, adresses, protocoles et le voyage d'une requête](https://intro-kodkod-6.nm-ambition.com/fr/docs/networking/01-networks-internet/): Comment les ordinateurs communiquent : les réseaux et le modèle client-serveur, les adresses IP, les ports et le DNS, le modèle en couches et les protocoles, et ce qui se passe entre la saisie d'une adresse et l'affichage du site. ### Python professionnel, code propre et débogage > Les noms et les petites fonctions, DRY/KISS et la séparation des responsabilités, les bugs, la stack trace et un processus de débogage méthodique. - [Code propre A : de bons noms, de petites fonctions et une responsabilité unique](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-clean-code/03-naming-and-small-functions/): Pourquoi le code propre est important, comment choisir des noms pour les variables, les fonctions et les fichiers, et comment découper une longue fonction en petites fonctions à responsabilité unique (Single Responsibility). - [Code propre B : DRY, KISS, séparation des responsabilités, commentaires et refactoring](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-clean-code/04-dry-kiss-soc-comments/): Quatre principes qui gardent le code sain dans la durée — ne pas se répéter (DRY), rester simple (KISS), séparer les différentes parties (Separation of Concerns) — et quand on a vraiment besoin de commentaires. Pour finir : comment améliorer un code existant en toute sécurité. - [Débogage A : ce qu'est un bug, les types d'erreurs et la lecture d'une stack trace](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-clean-code/05-bugs-and-stack-trace/): Ce qu'est un bug, les trois types d'erreurs — Syntax, Runtime et Logical — et comment lire un message d'erreur et une Stack Trace de bas en haut pour trouver exactement où et pourquoi le code a cassé. - [Débogage B : le processus de débogage et le débogueur de VS Code](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-clean-code/06-debugging-process-and-tools/): Un processus ordonné pour trouver les bugs — reproduire, isoler, comprendre la cause racine, corriger et vérifier — et une pratique concrète des Breakpoints, Step Over, Step Into, de la fenêtre Variables et de la Call Stack, avec la résolution d'un vrai bug du début à la fin. ### Exceptions et journalisation > La gestion des erreurs avec try/except/else/finally, la levée d'erreurs avec raise, et l'enregistrement de ce qui se passe dans un programme avec logging — y compris dans un fichier. - [Exceptions A : pourquoi gérer les erreurs, try et except](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/01-try-except/): Ce qu'est une Exception, pourquoi un vrai logiciel ne peut pas simplement planter, comment attraper une erreur avec try/except, et comment gérer correctement plusieurs types d'Exceptions. - [Exceptions B : else et finally — la structure complète](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/02-else-finally/): La structure complète de try/except/else/finally — ce qui s'exécute et quand, pourquoi else sépare le code risqué du code qui dépend de la réussite, et pourquoi finally est l'endroit pour le nettoyage qui doit toujours avoir lieu. - [Exceptions C : raise — lancer une erreur nous-mêmes](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/03-raise/): Comment et quand lancer nous-mêmes une Exception avec raise, comment choisir le type d'erreur adapté, et pourquoi il vaut mieux qu'une fonction lance une erreur claire plutôt que de renvoyer silencieusement une valeur fausse — y compris transmettre une erreur à l'appelant. - [Journalisation A : pourquoi print n'est pas du logging, et les niveaux du journal](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/04-logging-basics/): La différence entre print et le logging, ce qu'est un journal (log) et pourquoi tout vrai système en écrit un, les cinq niveaux du journal — debug, info, warning, error, critical — et comment choisir le niveau affiché. - [Journalisation B : enregistrer les journaux dans un fichier et consigner les actions importantes](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-errors-logging/05-logging-to-file/): Comment enregistrer les journaux dans un fichier qui reste après la fin du programme, les modes d'écriture (ajout face à écrasement), l'enregistrement des Exceptions avec le Traceback complet grâce à logging.exception, et ce qu'il vaut vraiment la peine de consigner. ### Git et GitHub > Le contrôle de version : pourquoi on en a besoin, les commandes Git de base, et le travail avec GitHub grâce à push. - [Le contrôle de version : pourquoi on en a besoin, et les concepts de base de Git](https://intro-kodkod-6.nm-ambition.com/fr/docs/git/01-version-control-concepts/): Ce qu'est le contrôle de version et quel problème il résout, ce qu'est Git, et les trois zones avec lesquelles travaille chaque commande Git — Working Directory, Staging Area et Repository — ainsi que ce qu'est un Commit. - [Les commandes Git de base : init, status, add, commit, log](https://intro-kodkod-6.nm-ambition.com/fr/docs/git/02-git-basic-commands/): Le travail quotidien avec Git étape par étape — créer un Repository, lire git status, ajouter au Staging, un Commit avec un message, voir l'historique et les différences (log, diff), et le fichier .gitignore. - [GitHub, Remote et Push — et de bons messages de Commit](https://intro-kodkod-6.nm-ambition.com/fr/docs/git/03-github-remote-push/): Créer un Repository sur GitHub, relier un Remote au Repository local, envoyer le code avec git push, s'authentifier auprès de GitHub, et les règles pour écrire des messages de Commit clairs. ### Structures de données et fonctions > list, tuple, set et dict, le slicing et la mutabilité, les fonctions avec args/kwargs/lambda, la portée (LEGB), et les fonctions avancées : fonctions pures, fonctions d'ordre supérieur, nonlocal et décorateurs. - [list : créer, accéder, ajouter, supprimer, rechercher et parcourir](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/01-list/): Tout sur list à partir des bases : comment créer une liste, les indices positifs et négatifs, ajouter (append, insert), supprimer (remove, pop, del), rechercher (in, index, count), parcourir et trier. - [tuple et set : un enregistrement fixe et une collection sans doublons](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/02-tuple-and-set/): tuple — une séquence fixe qu'on ne peut pas modifier, et sa décomposition en variables ; set — une collection sans doublons et sans ordre, des tests d'appartenance rapides et les opérations ensemblistes : union, intersection et différence. - [dict : clé et valeur](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/03-dict/): dict à partir des bases : comment créer un dictionnaire, lire une valeur par sa clé, ajouter, mettre à jour et supprimer, get avec une valeur par défaut, parcourir avec keys/values/items, et une liste de dictionnaires — la structure qui représente les enregistrements et le JSON. - [Slicing, Mutable face à Immutable, et is face à ==](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/04-slicing-mutability-identity/): Découper des séquences avec le Slicing [start:stop:step] ; la différence entre les types qu'on peut modifier et ceux qu'on ne peut pas ; ce qui se passe quand deux variables pointent vers la même liste ; et la différence entre l'égalité de valeur (==) et l'identité d'objet (is). - [Les fonctions en profondeur : valeurs par défaut, fonctions comme objets, *args, **kwargs et lambda](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/05-functions-args-kwargs-lambda/): Une révision ordonnée des fonctions, les paramètres avec une valeur par défaut et les arguments nommés, une fonction comme objet que l'on peut transmettre, les fonctions avec un nombre variable d'arguments (*args, **kwargs), et lambda à un niveau d'introduction. - [La portée (Scope) : Local, Enclosing, Global et Built-in (LEGB)](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/06-scope-legb/): Où une variable « vit » et d'où on peut la voir : les variables locales dans une fonction, les variables globales, une fonction dans une fonction (Enclosing), les noms intégrés, et l'ordre de recherche LEGB — y compris global et pourquoi il vaut mieux l'éviter. - [Les fonctions pures et les effets de bord](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/07-pure-functions/): Ce qu'est une fonction pure, ce qui compte comme effet de bord (Side Effect), pourquoi une fonction qui modifie une liste reçue est un piège, et comment écrire une version pure qui renvoie une nouvelle valeur. - [Les fonctions d'ordre supérieur : des fonctions qui reçoivent et renvoient des fonctions](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/08-higher-order-functions/): Une fonction qui reçoit une fonction en paramètre ou renvoie une fonction : passer une action en paramètre, map, filter, le paramètre key de sorted/max/min, et une fonction qui crée des fonctions. - [Les fonctions imbriquées, les closures et nonlocal](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/09-nested-functions-nonlocal/): Une fonction dans une fonction, le E de LEGB (Enclosing), une closure — une fonction qui se souvient des variables de la fonction qui l'a créée, et nonlocal pour modifier une variable de la fonction englobante. - [Les décorateurs : ajouter un comportement à une fonction sans y toucher](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/10-decorators/): Ce qu'est un décorateur (Decorator), comment il est construit à partir de fonctions d'ordre supérieur et de closures, la syntaxe @, un wrapper adapté à n'importe quelle fonction avec *args et **kwargs, et des exemples utiles : afficher les appels et mesurer le temps. ### Modules, fichiers et JSON > Découper le code en modules et en packages, travailler avec des fichiers texte et with, et enregistrer et lire des données en JSON. - [Les modules : pourquoi découper en fichiers, import, from et as](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-modules-files/01-modules-and-import/): Ce qu'est un module, pourquoi on découpe un projet en plusieurs fichiers, comment importer du code d'un autre fichier avec import, from et as, et ce qui se passe en coulisses lors d'un import. - [Les packages, __init__.py et if __name__ == "__main__"](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-modules-files/02-packages-and-main-guard/): Comment organiser des modules dans des dossiers (un package), quel est le rôle de __init__.py, comment importer depuis un package, et ce que signifie la condition if __name__ == '__main__' — et pourquoi tout fichier destiné à être exécuté en a besoin. - [Travailler avec des fichiers texte : open, with, lecture et écriture](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-modules-files/03-text-files-with/): Comment ouvrir un fichier, les modes d'ouverture (r, w, a), pourquoi il faut fermer un fichier et comment with le fait pour nous, les façons de lire (read, readlines, une boucle) et d'écrire (write), et comment construire un chemin qui ne dépend pas du dossier depuis lequel on lance. - [JSON : lire, écrire et enregistrer des données](https://intro-kodkod-6.nm-ambition.com/fr/docs/python-modules-files/04-json/): Ce qu'est JSON et pourquoi c'est le format le plus courant pour enregistrer et transférer des données, la correspondance entre JSON et les dict et list de Python, et l'enregistrement et le chargement de données avec json.dump, json.load, json.dumps et json.loads. ### POO – programmation orientée objet > Classes et objets, état, encapsulation et property, héritage et polymorphisme, et conception orientée objet — du problème à un système complet. - [Classes et objets : du problème à une classe complète](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/01-classes-and-objects/): Une leçon qui se déroule comme une histoire : un petit système bancaire qui casse sans POO, puis Class et Object, __init__ et self, les méthodes et les Class Attributes — et à la fin nous revenons à la banque pour la reconstruire, plus un mini-projet qui relie tout. - [Les objets au travail : état, masquage de l'information, properties et une classe complète](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/02-objects-in-practice/): Une leçon qui se déroule comme une histoire : de nombreux objets et un état qui change, puis nous découvrons que n'importe quel code peut casser les données — nous les cachons (encapsulation), gardons une syntaxe simple avec @property qui vérifie chaque affectation, et construisons une classe complète avec des règles. À la fin — un mini-projet qui relie tout. - [L'héritage et super : des classes semblables sans code dupliqué](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/03-inheritance/): Une leçon qui se déroule comme une histoire : un employé et un manager avec deux fois le même code — l'héritage le résout ; puis une classe enfant qui doit se comporter un peu différemment — la redéfinition (Override) et super(). À la fin — un mini-projet qui relie tout. - [Le polymorphisme : une interface commune, des comportements différents](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/04-polymorphism/): Ce que signifie le polymorphisme, pourquoi il est utile — un seul morceau de code qui fonctionne sur de nombreux types sans if — une interface commune via une classe parente, le Duck Typing en Python, et comment cela rend un système facile à étendre. - [La responsabilité unique en POO et la composition face à l'héritage](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/05-srp-and-composition/): Comment découper une God Class en classes à responsabilité unique, ce qu'est la composition (« a un » — un objet fait d'autres objets), et comment choisir entre composition et héritage — à un niveau d'introduction. - [Pratique guidée : d'une exigence verbale à une structure de classes](https://intro-kodkod-6.nm-ambition.com/fr/docs/oop/06-from-requirements-to-classes/): Un atelier de conception complet étape par étape : nous recevons une exigence pour un système de salle de sport, l'analysons, décidons des classes et des responsabilités, dessinons les relations, écrivons un squelette, implémentons et testons — un processus que l'on peut répéter dans chaque projet. ### Backend et FastAPI > Ce qu'est un backend, les méthodes HTTP et les codes d'état, path/query/body, la mise en place d'un premier serveur avec FastAPI, et le middleware qui s'exécute à chaque requête. - [Le backend et HTTP : qui fait quoi, les méthodes et les codes d'état](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/01-what-is-backend/): Le rôle du backend — comment le client, le serveur et la base de données travaillent ensemble, et ce que sont une API et un endpoint — et comment on lui parle : GET, POST, PUT et DELETE face au CRUD, et les codes de réponse de base que renvoie tout backend. - [FastAPI à partir de zéro : installation, app = FastAPI(), une première route et le lancement du serveur](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/04-fastapi-setup-first-route/): Mettre en place un premier serveur FastAPI étape par étape : un environnement virtuel (venv), l'installation avec pip, la création de main.py, l'import de FastAPI, la création de app, la définition d'une première route avec un décorateur, le lancement avec uvicorn, et la page de documentation automatique /docs. - [Path Params, Query Parameters et Body](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/03-params-query-body/): Les trois façons dont un client transmet des informations au serveur : un paramètre dans le chemin (/students/7), des paramètres dans la query (?city=Haifa&limit=10), et un body en JSON — quand utiliser chacun, et à quoi ils ressemblent dans une vraie requête. - [FastAPI : Path Params, query, body et HTTPException](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/05-fastapi-params-query-body/): Comment FastAPI lit les trois types d'entrée : un Path Parameter avec conversion de type, des Query Parameters avec des valeurs par défaut et des paramètres facultatifs, et un body défini par un modèle Pydantic — y compris les Type Hints, status_code=201, HTTPException pour le 404, et l'erreur 422 automatique. - [Le middleware : du code qui s'exécute à chaque requête](https://intro-kodkod-6.nm-ambition.com/fr/docs/backend-fastapi/06-middleware/): Ce qu'est un middleware dans FastAPI : du code qui enveloppe chaque requête vers le serveur — avant la route et après. Un journal pour chaque requête, la mesure du temps et un en-tête pour chaque réponse, async et await, et quand le middleware n'est pas le bon endroit. ### Bases de données et MySQL > Ce qu'est une base de données, MySQL dans un conteneur Docker avec une interface dans VS Code, la création de tables et les requêtes, et des opérations CRUD complètes depuis Python. - [Une base de données et la mise en place de MySQL : tables, clés, Docker et un pilote](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/01-what-is-a-database/): Pourquoi on a besoin d'une base de données quand on a des fichiers JSON, ce que sont Table, Row, Column, Primary Key, les types et les contraintes — et comment mettre en place un serveur MySQL dans un conteneur Docker, s'y connecter depuis VS Code avec Database Client et depuis Python via le pilote. - [La connexion, une table et l'insertion de données : Connection, CREATE TABLE et INSERT](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/03-open-test-close-connection/): Nous ouvrons une connexion à MySQL, vérifions qu'elle fonctionne et la fermons correctement avec try/finally — puis nous créons une table avec des types et des contraintes, insérons des données depuis Python et voyons la base de données refuser les données qui enfreignent les règles. - [Le SQL de base : SELECT, WHERE par id et un filtrage simple](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/02-select-where/): Lire des données dans une table : SELECT de toutes les lignes ou de colonnes choisies, WHERE par id pour récupérer un enregistrement, des conditions simples (=, >, AND), ORDER BY pour trier, et ce que renvoie une requête qui n'a rien trouvé. - [Exécuter une requête depuis Python : execute, paramètres, commit et fetch](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/03-queries-from-python/): Le parcours complet Python → connexion → requête → base de données → résultat → Python : exécuter CREATE, INSERT et SELECT avec execute, les paramètres avec %s (et pourquoi il ne faut pas construire du SQL par concaténation — l'injection SQL), commit pour enregistrer, lastrowid, et fetchone/fetchall. - [Mettre à jour et supprimer : UPDATE et DELETE par id — en SQL et depuis Python](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/01-update/): Mettre à jour un enregistrement et supprimer un enregistrement par id, en SQL comme depuis Python avec des paramètres : pourquoi WHERE est obligatoire, comment savoir si quelque chose a vraiment changé avec rowcount, et ce qu'il advient d'un id supprimé. - [Un CRUD complet depuis Python : un module db.py complet et le test des quatre actions](https://intro-kodkod-6.nm-ambition.com/fr/docs/databases/04-full-crud-module/): Relier tout ce que nous avons appris en un seul module complet d'accès à la base de données — init_db, create, get_all, get, update et delete — avec des paramètres, commit, rowcount, la traduction des erreurs et des dicts, et un script de test qui exécute les quatre actions CRUD sur une seule entité. ### API des étudiants – un serveur avec une base de données > Connecter les routes à la base de données, une API des étudiants avec un CRUD complet, et les tests avec Swagger. - [Relier les routes aux actions de la base de données : l'architecture](https://intro-kodkod-6.nm-ambition.com/fr/docs/students-api/01-connecting-routes-to-db/): Comment relier FastAPI à db.py : séparer la route du code d'accès à la base de données, le tableau de correspondance POST→INSERT, GET→SELECT, PUT→UPDATE, DELETE→DELETE, ce qui se passe dans une requête de bout en bout, et l'exécution des deux premiers endpoints — GET de tous et GET par id. - [L'API des étudiants — CRUD complet : POST, GET, PUT et DELETE sur la base de données](https://intro-kodkod-6.nm-ambition.com/fr/docs/students-api/02-students-api-full-crud/): Compléter le serveur : un modèle Pydantic pour l'entrée, une fonction de validation partagée, un POST qui crée et renvoie 201, un PUT qui met à jour avec 404 et 409, un DELETE qui renvoie 204 — le code complet de main.py, et toutes ses vraies réponses. - [Tester le système : Swagger UI, curl et un script de test en Python](https://intro-kodkod-6.nm-ambition.com/fr/docs/students-api/03-testing-with-swagger/): Trois façons de tester une API — Swagger UI à /docs (Try it out), curl depuis le terminal, et un script Python qui exécute une suite de requêtes et les compare aux codes attendus — et une liste ordonnée de tests manuels pour toutes les actions CRUD.