sql方式意味着使用批注,聚合,子查询,时间,案例,窗口等。即从sql获取所有额外的计算列
直到现在,如果我想从每一行的数据中获取一些附加信息(例如计算某物等),我通常会在queryset中获取表并遍历每个对象,然后将所需结果存储在字典列表中并传递它到模板。当然,我正在使用预取,以便可以避免N + 1个查询。
但是自Django 1.11以来,我们可以使用sql(即使用批注,聚合,子查询,时间,大小写,窗口等)以更富有表现力的方式进行相同的操作,而无需使用python。
缺点:
我发现使用sql方式而不是python方式的一个缺点是调试。
我必须对每个queryset对象的数据进行复杂的计算。这样我就可以逐步检查。
如果我以sql方式进行操作,我只能看到最终结果,但无法跟踪步骤。
优势:
我没有尝试过,但是从The Dramatic Benefits of Django Subqueries and Annotations那里听说,它很快。
目前我的大多数sql花费不到100毫秒,并且大部分时间都在dom加载中。因此,使用sql方式将对我有任何帮助。
我很高兴Django创建了更多的功能,有助于表达性地编写sql。