{"title":"FAQ : Bases de données et modèles","version":"5.0","locale":"fr","docname":"faq/models","url":"/fr/5.0/faq/models/","canonical":"https://djangodocs.dev/fr/5.0/faq/models/","summary":"Comment est-ce que je peux voir les requêtes SQL brutes exécutées par Django ? Lien vers cette rubrique # Vérifiez que le réglage Django DEBUG est défini à True .…","html":"<h1>FAQ : Bases de données et modèles<a class=\"heading-anchor\" href=\"#faq-databases-and-models\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"how-can-i-see-the-raw-sql-queries-django-is-running\">\n<span id=\"faq-see-raw-sql-queries\"></span><h2>Comment est-ce que je peux voir les requêtes SQL brutes exécutées par Django ?<a class=\"heading-anchor\" href=\"#how-can-i-see-the-raw-sql-queries-django-is-running\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vérifiez que le réglage Django <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> est défini à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Ensuite, faites ceci :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connection</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">queries</span>\n<span class=\"go\">[{&#39;sql&#39;: &#39;SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls&#39;,</span>\n<span class=\"go\">&#39;time&#39;: &#39;0.002&#39;}]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> est uniquement disponible si <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. C’est une liste de dictionnaires dans l’ordre d’exécution des requêtes. Chaque dictionnaire contient ce qui suit :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> - l’instruction SQL brute</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">time</span></code> - la durée d’exécution de l’instruction, en secondes.</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">connection.queries</span></code> comprend toutes les instructions SQL – INSERT, UPDATE, SELECT, etc. Chaque fois que votre application accède à la base de données, les requêtes sont journalisées.</p>\n<p>Si vous utilisez <a class=\"reference internal\" href=\"/fr/5.0/topics/db/multi-db/\"><span class=\"doc\">plusieurs bases de données</span></a>, vous pouvez utiliser la même interface sur chaque membre du dictionnaire <code class=\"docutils literal notranslate\"><span class=\"pre\">connections</span></code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connections</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">connections</span><span class=\"p\">[</span><span class=\"s2\">&quot;my_db_alias&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">queries</span>\n</code></pre></div>\n<p>Si vous avez besoin d’effacer manuellement la liste des requêtes à tout moment dans vos fonctions, appelez <code class=\"docutils literal notranslate\"><span class=\"pre\">reset_queries()</span></code> comme ceci :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reset_queries</span>\n\n<span class=\"n\">reset_queries</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"can-i-use-django-with-a-preexisting-database\">\n<h2>Puis-je utiliser Django avec une base de données pré-existante ?<a class=\"heading-anchor\" href=\"#can-i-use-django-with-a-preexisting-database\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Oui. Voir <a class=\"reference internal\" href=\"/fr/5.0/howto/legacy-databases/\"><span class=\"doc\">Intégration avec une base de données existante</span></a>.</p>\n</section>\n<section id=\"if-i-make-changes-to-a-model-how-do-i-update-the-database\">\n<h2>Si je fais des changements à un modèle, comment puis-je mettre à jour la base de données ?<a class=\"heading-anchor\" href=\"#if-i-make-changes-to-a-model-how-do-i-update-the-database\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Jetez un œil à la prise en charge des <a class=\"reference internal\" href=\"/fr/5.0/topics/migrations/#module-django.db.migrations\" title=\"django.db.migrations: Schema migration support for Django models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">migrations</span> <span class=\"pre\">de</span> <span class=\"pre\">schéma</span></code></a> par Django.</p>\n<p>Si cela ne vous dérange pas d’effacer les données, l’utilitaire <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> a une option <a class=\"reference internal\" href=\"/fr/5.0/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a> pour réinitialiser la base de données à l’état où elle se trouvait immédiatement après que <a class=\"reference internal\" href=\"/fr/5.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> fut exécuté.</p>\n</section>\n<section id=\"do-django-models-support-multiple-column-primary-keys\">\n<h2>Est-ce que les modèles de Django prennent en charge les clés primaires sur plusieurs colonnes ?<a class=\"heading-anchor\" href=\"#do-django-models-support-multiple-column-primary-keys\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Non. Seules les clés primaires sur une seule colonne sont prises en charge.</p>\n<p>Mais ce n’est pas un problème en pratique, car rien ne vous empêche d’ajouter d’autres contraintes (en utilisant l’option de modèle <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_together</span></code> ou en créant la contrainte directement dans votre base de données), et de faire respecter l’unicité à ce niveau. Les clés primaires sur une seule colonne sont nécessaires au bon fonctionnement de l’interface d’administration ; par exemple quand il y a besoin d’une seule valeur pour désigner un objet à modifier ou à supprimer.</p>\n</section>\n<section id=\"does-django-support-nosql-databases\">\n<h2>Django prend-il en charge les bases de données NoSQL ?<a class=\"heading-anchor\" href=\"#does-django-support-nosql-databases\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les bases de données NoSQL ne sont pas officiellement prises en charge par Django lui-même. Il existe toutefois un certain nombre de projets externes permettant d’exploiter la fonctionnalité NoSQL dans Django.</p>\n<p>Vous pouvez consulter la <a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/NoSqlSupport\">page de Wiki</a> qui présente certains de ces projets.</p>\n</section>\n<section id=\"how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type\">\n<h2>Comment puis-je ajouter des options spécifiques à la base de données dans mes commandes CREATE TABLE, telles que spécifier MyISAM comme type de table ?<a class=\"heading-anchor\" href=\"#how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nous essayons d’éviter d’ajouter des cas spéciaux dans le code de Django pour accueillir toutes les options spécifiques aux bases de données telles que le type de table, etc. Si vous souhaitez utiliser une de ces options, créez une migration avec une opération <a class=\"reference internal\" href=\"/fr/5.0/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code></a> contenant des instructions <code class=\"docutils literal notranslate\"><span class=\"pre\">ALTER</span> <span class=\"pre\">TABLE</span></code> faisant ce que vous voulez faire.</p>\n<p>Par exemple, si vous utilisez MySQL et que vous voulez que vos tables utilisent le type de table MyISAM, utilisez le code SQL suivant :</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">ALTER</span><span class=\"w\"> </span><span class=\"k\">TABLE</span><span class=\"w\"> </span><span class=\"n\">myapp_mytable</span><span class=\"w\"> </span><span class=\"n\">ENGINE</span><span class=\"o\">=</span><span class=\"n\">MyISAM</span><span class=\"p\">;</span>\n</code></pre></div>\n</section>","rootId":"faq-databases-and-models","toc":[{"title":"Comment est-ce que je peux voir les requêtes SQL brutes exécutées par Django ?","anchor":"how-can-i-see-the-raw-sql-queries-django-is-running","children":[]},{"title":"Puis-je utiliser Django avec une base de données pré-existante ?","anchor":"can-i-use-django-with-a-preexisting-database","children":[]},{"title":"Si je fais des changements à un modèle, comment puis-je mettre à jour la base de données ?","anchor":"if-i-make-changes-to-a-model-how-do-i-update-the-database","children":[]},{"title":"Est-ce que les modèles de Django prennent en charge les clés primaires sur plusieurs colonnes ?","anchor":"do-django-models-support-multiple-column-primary-keys","children":[]},{"title":"Django prend-il en charge les bases de données NoSQL ?","anchor":"does-django-support-nosql-databases","children":[]},{"title":"Comment puis-je ajouter des options spécifiques à la base de données dans mes commandes CREATE TABLE, telles que spécifier MyISAM comme type de table ?","anchor":"how-do-i-add-database-specific-options-to-my-create-table-statements-such-as-specifying-myisam-as-the-table-type","children":[]}],"breadcrumbs":[{"docname":"faq/index","title":"FAQ Django","url":"/fr/5.0/faq/"}],"prev":{"docname":"faq/help","title":"FAQ : Obtenir de l’aide","url":"/fr/5.0/faq/help/"},"next":{"docname":"faq/admin","title":"FAQ : l’interface d’administration","url":"/fr/5.0/faq/admin/"},"formats":{"html":"/fr/5.0/faq/models/","markdown":"/fr/5.0/faq/models.md","json":"/fr/5.0/faq/models.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/faq/models.txt","official":"https://docs.djangoproject.com/fr/5.0/faq/models/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}