2010-06-18 6 views
0

est-il un moyen d'imprimer requête par exemple de cette ligne de codefacilement comparer les plans MySQL dans Django

Model.objects.all().order_by(sort_headers.get_order_by()) 

Je veux planifier meilleure façon d'utiliser Django mais avec> 1 million d'objets dans mon modèle Cela devient trop lent.

Répondre

1

Deux possibilités viennent à l'esprit:

  1. Vous pouvez consulter les requêtes SQL brutes comme décrites dans le Django FAQ:

    Assurez-vous que vos réglages Django DEBUG est définie sur 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'}] 
    
  2. Vous pouvez également regarder le debugsqlshell fourni dans le cadre de le paquet Django Debug Toolbar . Ceci produit sous-jacent SQL pour chaque appel ORM qui résulte dans une requête de base de données, par exemple:

    >>> from page.models import Page 
    >>> ### Lookup and use resulting in an extra query... 
    >>> p = Page.objects.get(pk=1) 
    SELECT "page_page"."id", 
         "page_page"."number", 
         "page_page"."template_id", 
         "page_page"."description" FROM "page_page" WHERE 
    "page_page"."id" = 1 
    
0

Chaque queryset a une référence .query à l'objet de la requête. L'impression de cet objet vous donnera la requête exécutée.

>>> f = Model.objects.all().order_by(sort_headers.get_order_by()) 
>>> print(f.query) 
>>> query = str(f.query) # if you want to save it