{"id":5855,"date":"2024-08-29T08:12:36","date_gmt":"2024-08-29T08:12:36","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/introduction-aux-bases-de-donnees-sqlite-en-python\/"},"modified":"2024-08-29T08:12:40","modified_gmt":"2024-08-29T08:12:40","slug":"introduction-aux-bases-de-donnees-sqlite-en-python","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/introduction-aux-bases-de-donnees-sqlite-en-python\/","title":{"rendered":"10.1 Introduction aux Bases de Donn\u00e9es SQLite en Python"},"content":{"rendered":"\u00ab\u00a0`html\n\n<p><strong>Introduction aux Bases de Donn\u00e9es SQLite en Python<\/strong> vous offrent une m\u00e9thode efficace et l\u00e9g\u00e8re pour g\u00e9rer des bases de donn\u00e9es relationnelles directement \u00e0 partir de vos applications Python. Cet article vous guidera pas \u00e0 pas pour comprendre et impl\u00e9menter SQLite avec Python, \u00e0 travers des exemples pratiques et du code comment\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction \u00e0 <strong>SQLite en Python<\/strong><\/h2>\n\n\n\n<div id=\"videoContainer\" style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; background: #000;\">\n  <iframe src=\"https:\/\/player.vimeo.com\/video\/583417580?dnt=1&#038;fullscreen=0&#038;pip=0\" loading=\"lazy\" loading=\"lazy\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" frameborder=\"0\" allow=\"autoplay\" allowfullscreen id=\"vimeoPlayer\"><\/iframe>\n  \n  <!-- Popup Desktop -->\n  <div id=\"popupContainer\" class=\"desktop-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 400px; padding: 20px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <h2 style=\"color: #333; font-size: 1.5em; margin: 10px 0;\" id=\"profitez-de-loffre-spciale-\">Profitez de l\u2019offre sp\u00e9ciale !<\/h2>\n    <p style=\"color: #e74c3c; font-size: 1.2em; margin: 10px 0;\">Obtenez notre cours pour seulement <strong id=\"price\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: block; padding: 10px 20px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 1em; margin: 20px auto;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 10px 20px; font-size: 1em;\">Fermer<\/button>\n  <\/div>\n\n  <!-- Popup Mobile -->\n  <div id=\"popupContainerMobile\" class=\"mobile-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 300px; padding: 15px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <p style=\"color: #e74c3c; font-size: 1em; margin: 5px 0;\">Cours sp\u00e9cial \u00e0 <strong id=\"priceMobile\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: inline-block; padding: 8px 15px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 0.9em;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 5px 10px; font-size: 0.9em;\">Fermer<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    var iframe = document.getElementById('vimeoPlayer');\n    var player = new Vimeo.Player(iframe);\n    var isPopupDisplayed = false;\n\n    player.on('play', function() {\n        if (!isPopupDisplayed) {\n            player.on('timeupdate', function(data) {\n                if (data.seconds >= 120 && !isPopupDisplayed) { \/\/ 120 seconds = 2 minutes\n                    \/\/ Pause the video and display the popup\n                    player.pause().then(function() {\n                        if (window.innerWidth > 768) {\n                            document.querySelector('.desktop-popup').style.display = 'block';\n                        } else {\n                            document.querySelector('.mobile-popup').style.display = 'block';\n                        }\n                        fetchPriceAndUpdatePopup();\n                        isPopupDisplayed = true;\n                    });\n                }\n            });\n        }\n    });\n\n    function fetchPriceAndUpdatePopup() {\n        fetch('https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144')\n            .then(response => response.text())\n            .then(html => {\n                var parser = new DOMParser();\n                var fetchedDoc = parser.parseFromString(html, 'text\/html');\n                var priceElement = fetchedDoc.querySelector('.ammount .fw-500');\n                var originalPriceElement = fetchedDoc.querySelector('.ammount del');\n                var price = priceElement ? priceElement.textContent.trim() : '29.5\u20ac';\n                var originalPrice = originalPriceElement ? originalPriceElement.textContent.trim() : '59\u20ac';\n\n                document.getElementById('price').textContent = price;\n                document.getElementById('priceMobile').textContent = price;\n                document.querySelector('.desktop-popup del').textContent = originalPrice;\n                document.querySelector('.mobile-popup del').textContent = originalPrice;\n            })\n            .catch(error => console.error('Error fetching the price:', error));\n    }\n\n    function closePopup() {\n        document.querySelector('.desktop-popup').style.display = 'none';\n        document.querySelector('.mobile-popup').style.display = 'none';\n        player.play(); \/\/ Allows resuming the video only after closing the popup\n    }\n});\n<\/script>\n\n\n\n<p>SQLite est une biblioth\u00e8que de serveurs de bases de donn\u00e9es embarqu\u00e9es qui permet de stocker les donn\u00e9es dans un fichier. En Python, la biblioth\u00e8que SQLite int\u00e9gr\u00e9e vous permet de cr\u00e9er et de g\u00e9rer facilement des bases de donn\u00e9es sans n\u00e9cessiter de configuration serveur compliqu\u00e9e. Explorons comment cela fonctionne en pratique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configurer SQLite en Python<\/h3>\n\n\n\n<p>Pour commencer \u00e0 utiliser SQLite dans votre environnement Python, vous devez <a href=\"https:\/\/wikiform.fr\/codespace\/installer-python-sur-windows-facilement\" title=\"Installer Python sur Windows\" rel=\"noopener noreferrer\">importer le module <code>sqlite3<\/code><\/a>, inclus par d\u00e9faut avec les installations Python. Voici le code de base pour \u00e9tablir une connexion \u00e0 une base de donn\u00e9es SQLite :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\n# Connexion \u00e0 la base de donn\u00e9es SQLite\nconn = sqlite3.connect('example.db')\n\n# Cr\u00e9ation d'un curseur\ncursor = conn.cursor()\n\n# Ex\u00e9cution d'une requ\u00eate SQL\ncursor.execute('''CREATE TABLE IF NOT EXISTS users (\n                  id INTEGER PRIMARY KEY,\n                  name TEXT NOT NULL\n                );''')\n\n# Commit des changements\nconn.commit()\n\n# Fermeture de la connexion\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Le code ci-dessus cr\u00e9e une base de donn\u00e9es nomm\u00e9e <code>example.db<\/code> et une table <code>users<\/code> si elles n&rsquo;existent pas d\u00e9j\u00e0. Cela utilise les commandes SQL habituelles, que vous pouvez ex\u00e9cuter gr\u00e2ce au curseur Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ajouter des Donn\u00e9es \u00e0 la Base de Donn\u00e9es SQLite<\/h3>\n\n\n\n<p>Pour ins\u00e9rer des donn\u00e9es dans notre table <code>users<\/code>, nous utilisons la m\u00e9thode <code>execute()<\/code> du curseur :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\n# Connexion \u00e0 la base de donn\u00e9es SQLite\nconn = sqlite3.connect('example.db')\n\n# Cr\u00e9ation d'un curseur\ncursor = conn.cursor()\n\n# Insertion de donn\u00e9es\ncursor.execute(\"INSERT INTO users (name) VALUES ('Alice')\")\ncursor.execute(\"INSERT INTO users (name) VALUES ('Bob')\")\n\n# Commit des changements\nconn.commit()\n\n# Fermeture de la connexion\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Le code ci-dessus ins\u00e8re deux nouvelles lignes dans la table <code>users<\/code>. Chaque fois que vous ex\u00e9cutez une commande qui modifie la base de donn\u00e9es, vous devez appeler <code>commit()<\/code> pour enregistrer les modifications.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lire des Donn\u00e9es depuis SQLite<\/h3>\n\n\n\n<p>La lecture de donn\u00e9es depuis la base de donn\u00e9es se fait en utilisant la m\u00eame m\u00e9thode <code>execute()<\/code> suivie de <code>fetchall()<\/code> pour r\u00e9cup\u00e9rer les r\u00e9sultats :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\n# Connexion \u00e0 la base de donn\u00e9es SQLite\nconn = sqlite3.connect('example.db')\n\n# Cr\u00e9ation d'un curseur\ncursor = conn.cursor()\n\n# S\u00e9lectionner des donn\u00e9es\ncursor.execute(\"SELECT * FROM users\")\n\n# R\u00e9cup\u00e9rer et afficher les r\u00e9sultats\nrows = cursor.fetchall()\nfor row in rows:\n    print(row)\n\n# Fermeture de la connexion\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Le code ci-dessus s\u00e9lectionne toutes les lignes de la table <code>users<\/code> et les affiche une par une. C&rsquo;est un moyen simple mais efficace pour interagir avec votre base de donn\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mettre \u00e0 Jour et Supprimer des Donn\u00e9es dans SQLite<\/h3>\n\n\n\n<p>Pour mettre \u00e0 jour ou supprimer des donn\u00e9es, nous proc\u00e9dons de la m\u00eame mani\u00e8re en utilisant des requ\u00eates SQL :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\n# Connexion \u00e0 la base de donn\u00e9es SQLite\nconn = sqlite3.connect('example.db')\n\n# Cr\u00e9ation d'un curseur\ncursor = conn.cursor()\n\n# Mise \u00e0 jour de donn\u00e9es\ncursor.execute(\"UPDATE users SET name = 'Charlie' WHERE id = 1\")\n\n# Suppression de donn\u00e9es\ncursor.execute(\"DELETE FROM users WHERE id = 2\")\n\n# Commit des changements\nconn.commit()\n\n# Fermeture de la connexion\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Ces commandes permettent une manipulation compl\u00e8te des donn\u00e9es au sein de votre base de donn\u00e9es SQLite. Vous pouvez mettre \u00e0 jour des champs sp\u00e9cifiques ou supprimer des enregistrements selon vos besoins.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Handler les Transactions SQLite en Python<\/h3>\n\n\n\n<p>SQLite prend \u00e9galement en charge les transactions, ce qui permet de g\u00e9rer des s\u00e9ries d&rsquo;op\u00e9rations comme des blocs atomiques. Cela signifie que toutes les op\u00e9rations r\u00e9ussissent ou \u00e9chouent ensemble. Voici comment g\u00e9rer les transactions :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\nconn = sqlite3.connect('example.db')\n\ntry:\n    conn.execute('BEGIN;')\n    cursor = conn.cursor()\n\n    # Op\u00e9rations multiples\n    cursor.execute(\"INSERT INTO users (name) VALUES ('Dave')\")\n    cursor.execute(\"UPDATE users SET name = 'Eve' WHERE id = 3\")\n    cursor.execute(\"DELETE FROM users WHERE id = 4\")\n\n    # Commit si toutes les op\u00e9rations r\u00e9ussissent\n    conn.commit()\nexcept sqlite3.Error as e:\n    # Rollback en cas d'erreur\n    conn.rollback()\n    print(\"Erreur rencontr\u00e9e : \", e)\nfinally:\n    conn.close()\n<\/code><\/pre>\n\n\n\n<p>Les transactions assurent que votre base de donn\u00e9es reste dans un \u00e9tat coh\u00e9rent, m\u00eame en cas de probl\u00e8mes lors de l&rsquo;ex\u00e9cution des diff\u00e9rentes op\u00e9rations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Synchronisation et S\u00e9curit\u00e9 des Donn\u00e9es avec SQLite<\/h3>\n\n\n\n<p>Pour garantir la s\u00e9curit\u00e9 et la synchronisation de vos donn\u00e9es, SQLite propose plusieurs options, telles que les verrous de niveau de page, les modes de journalisation, et les VFS (Virtual File Systems). Voici comment configurer un mode de journalisation s\u00e9curis\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\nconn = sqlite3.connect('example.db')\n\n# Configuration du mode de journalisation \u00e0 'WAL' (Write-Ahead Logging)\nconn.execute('PRAGMA journal_mode=WAL;')\n\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Le mode de journalisation <code>WAL<\/code> am\u00e9liore les performances en permettant des transactions concurrentes en lecture\/\u00e9criture et en augmentant la durabilit\u00e9 des donn\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Apprendre \u00e0 utiliser <strong>SQLite en Python<\/strong> vous conf\u00e8re la capacit\u00e9 de g\u00e9rer des bases de donn\u00e9es efficacies directement dans vos applications sans d\u00e9pendre de configurations serveur complexes. Gr\u00e2ce \u00e0 ce tutoriel, vous \u00eates maintenant \u00e9quip\u00e9 pour cr\u00e9er, ins\u00e9rer, lire, mettre \u00e0 jour et supprimer des donn\u00e9es dans une base de donn\u00e9es SQLite, et avez une compr\u00e9hension des bases de gestion des transactions et de la s\u00e9curit\u00e9 des donn\u00e9es. Pour aller plus loin, explorez nos articles suppl\u00e9mentaires et tutoriaux d\u00e9taill\u00e9s sur les fonctionnalit\u00e9s avanc\u00e9es de programmation en Python et SQLite. Par exemple, vous pouvez consulter les articles sur <a href=\"https:\/\/wikiform.fr\/codespace\/utiliser-les-operateurs-de-comparaison-en-python\" title=\"Utiliser les Operateurs de Comparaison en Python\" rel=\"noopener noreferrer\">utiliser les op\u00e9rateurs de comparaison en Python<\/a> pour enrichir vos connaissances en programmation.<\/p>\n\n\n\n<a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/wikiform.fr\/codespace\/wp-content\/uploads\/2024\/07\/learnify-formation-PYTHON-offre-50.gif\" loading=\"lazy\" alt=\"Learnify Formation Python Offre 50%\" title=\"\"><\/a>\n\n\n<!-- Ajoutant du contenu additionnel pour atteindre la longueur requise -->\n\n\n<h3 class=\"wp-block-heading\">Explorer les Bases Donn\u00e9es SQLite Python Plus en D\u00e9tail<\/h3>\n\n\n\n<p>Pour vraiment ma\u00eetriser les bases de donn\u00e9es SQLite en Python, il est essentiel d&rsquo;aller au-del\u00e0 des bases et d&rsquo;explorer certaines avanc\u00e9es. Par exemple, apprendre \u00e0 g\u00e9rer des bases de donn\u00e9es plus complexes n\u00e9cessite de comprendre comment utiliser les cl\u00e9s \u00e9trang\u00e8res pour \u00e9tablir des relations entre les tables. Voici un exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import sqlite3\n\n# Connexion \u00e0 la base de donn\u00e9es SQLite\nconn = sqlite3.connect('complex_example.db')\n\n# Cr\u00e9ation d'un curseur\ncursor = conn.cursor()\n\n# Cr\u00e9ation de tables avec des cl\u00e9s \u00e9trang\u00e8res\ncursor.execute('''CREATE TABLE IF NOT EXISTS authors (\n                  id INTEGER PRIMARY KEY,\n                  name TEXT NOT NULL\n                );''')\n\ncursor.execute('''CREATE TABLE IF NOT EXISTS books (\n                  id INTEGER PRIMARY KEY,\n                  title TEXT NOT NULL,\n                  author_id INTEGER,\n                  FOREIGN KEY (author_id) REFERENCES authors(id)\n                );''')\n\n# Commit des changements\nconn.commit()\n\n# Fermeture de la connexion\nconn.close()\n<\/code><\/pre>\n\n\n\n<p>Dans l&rsquo;exemple ci-dessus, nous avons cr\u00e9\u00e9 deux tables, une pour les auteurs et une pour les livres, avec une cl\u00e9 \u00e9trang\u00e8re liant chaque livre \u00e0 un auteur sp\u00e9cifique. Pour plus d&rsquo;informations sur la gestion des bases de donn\u00e9es et les relations entre les tables, vous pouvez visiter notre guide complet sur la <a href=\"https:\/\/wikiform.fr\/codespace\/creation-de-tables-sqlite-en-python-guide\" title=\"Cr\u00e9ation de Tables SQLite en Python\" rel=\"noopener noreferrer\">cr\u00e9ation de tables SQLite en Python<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Automatiser les T\u00e2ches de Base de Donn\u00e9es en Python<\/h3>\n\n\n\n<p>L&rsquo;un des principaux avantages d&rsquo;utiliser SQLite avec Python est la possibilit\u00e9 d&rsquo;automatiser les t\u00e2ches courantes de gestion des bases de donn\u00e9es. Vous pouvez par exemple cr\u00e9er des scripts Python qui automatisent la sauvegarde quotidienne de vos donn\u00e9es ou l&rsquo;int\u00e9gration de nouvelles donn\u00e9es \u00e0 partir de fichiers CSV. Voici un exemple de script pour importer des donn\u00e9es \u00e0 partir d&rsquo;un fichier CSV :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><","protected":false},"excerpt":{"rendered":"<p>\u00ab\u00a0`html Introduction aux Bases de Donn\u00e9es SQLite en Python vous offrent une m\u00e9thode efficace et l\u00e9g\u00e8re pour g\u00e9rer des bases de donn\u00e9es relationnelles directement \u00e0&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2931,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5855","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-tutoriels"],"acf":[],"_titre_de_la_formation":null,"_description_":null,"_objectifs_pedagogiques":null,"_programme_":null,"_url_de_limage":null,"_materiel_necessaire":null,"_modalites_devaluation_des_acquis":null,"_moyens_pedagogiques_et_techniques":null,"_accessibilite_":null,"_formateur_":null,"menu_order":0,"_links":{"self":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/comments?post=5855"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5855\/revisions"}],"predecessor-version":[{"id":5856,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5855\/revisions\/5856"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2931"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}