Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中轻松比较MySQL计划_Django_Sql Execution Plan - Fatal编程技术网

在Django中轻松比较MySQL计划

在Django中轻松比较MySQL计划,django,sql-execution-plan,Django,Sql Execution Plan,例如,有没有一种方法可以从这行代码中打印出查询 Model.objects.all().order_by(sort_headers.get_order_by()) 我想计划使用Django的最佳方式,但我的模型中的对象超过100万,速度太慢了。想到两个选项: 您可以按以下方式查看原始SQL查询: 请参见: 确保您的Django调试设置 设置为True。那么,就这样做: >>> from django.db import connection >>> conn

例如,有没有一种方法可以从这行代码中打印出查询

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

我想计划使用Django的最佳方式,但我的模型中的对象超过100万,速度太慢了。

想到两个选项:

  • 您可以按以下方式查看原始SQL查询: 请参见:

    确保您的Django调试设置 设置为True。那么,就这样做:

    >>> 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'}]
    
  • 你也可以看看
    debugsqlshell
    作为 这个 包裹这将输出底层的 每个ORM调用结果的SQL 例如,在数据库查询中:

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

  • 每个查询集都有一个对查询对象的
    .query
    引用。打印此对象将为您提供已执行的查询

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