FAQ : Bases de données et modèles

Comment est-ce que je peux voir les requêtes SQL brutes exécutées par Django ?

Vérifiez que le réglage Django DEBUG est défini à True. Ensuite, faites ceci :

>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]

connection.queries est uniquement disponible si DEBUG vaut True. C’est une liste de dictionnaires dans l’ordre d’exécution des requêtes. Chaque dictionnaire contient ce qui suit :

``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.

connection.queries 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.

Si vous utilisez plusieurs bases de données, vous pouvez utiliser la même interface sur chaque membre du dictionnaire connections:

>>> from django.db import connections
>>> connections['my_db_alias'].queries

Si vous avez besoin d’effacer manuellement la liste des requêtes à tout moment dans vos fonctions, appelez reset_queries() comme ceci :

from django.db import reset_queries
reset_queries()

Puis-je utiliser Django avec une base de données pré-existante ?

Oui. Voir Intégration avec une base de données existante.

Si je fais des changements à un modèle, comment puis-je mettre à jour la base de données ?

Jetez un œil à la prise en charge des migrations de schéma par Django.

Si cela ne vous dérange pas d’effacer les données, l’utilitaire manage.py a une option flush pour réinitialiser la base de données à l’état où elle se trouvait immédiatement après que migrate fut exécuté.

Est-ce que les modèles de Django prennent en charge les clés primaires sur plusieurs colonnes ?

Non. Seules les clés primaires sur une seule colonne sont prises en charge.

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 unique_together 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.

Django prend-il en charge les bases de données NoSQL ?

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.

Vous pouvez consulter la page de Wiki qui présente certains de ces projets.

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 ?

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 RunSQL contenant des instructions ALTER TABLE faisant ce que vous voulez faire.

Par exemple, si vous utilisez MySQL et que vous voulez que vos tables utilisent le type de table MyISAM, utilisez le code SQL suivant :

ALTER TABLE myapp_mytable ENGINE=MyISAM;
Back to Top