【问题标题】:Django raw sql queryDjango 原始 sql 查询
【发布时间】:2012-03-16 06:49:43
【问题描述】:

我有一个这样的模型:

class Document(models.Model): 
    data = models.TextField() 
    users = models.ManyToManyField(User)

您如何将上述模型的以下查询转换为原始 sql?

Document.objects.annotate(num_users=Count(users))

我需要将其切换为原始 sql,因为在使用 MySql 时 django 中存在一个错误,导致注释非常慢。

但我不确定如何处理原始 sql 中的多对多字段..

Document.objects.raw('SELECT ...')

【问题讨论】:

    标签: mysql django django-models django-queryset


    【解决方案1】:

    将 Django 查询转换为 SQL 的最简单方法是简单地查看 Django 生成的 SQL:How can I see the raw SQL queries Django is running?

    【讨论】:

    • 小心!也许他正在谈论的错误是 django 如何将该查询转换为 mysql 语法(尽管我几乎不相信在 postgre 或 mysql 等不同的 DBMS 中对该查询的处理方式不同)。如果@9-bits 觉得原始查询继续运行缓慢,他应该在此处添加 django 抛出的原始 sql...
    【解决方案2】:

    您可以通过以下方式得到相应的查询:

    queryset = Document.objects.annotate(num_users=Count(users))  
    sql_query = queryset.query
    print(sql_query)
    

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 2018-05-15
      • 2013-04-17
      • 2019-08-05
      • 2011-02-01
      • 2013-12-31
      • 2011-08-21
      • 2016-10-20
      • 2017-04-08
      相关资源
      最近更新 更多