Django JOIN:原始sql与内存

时间:2015-08-04 14:40:14

标签: django django-models orm django-orm

我有一个SQL JOIN,它不能很好地转换为Django ORM语法,我想知道哪种替代解决方案更好:

  1. 使用原始SQL查询或
  2. 使用两个查询集并在内存中执行连接以注释其中一个。
  3. 我可以在线性时间加入两个查询集,所以我不认为2.会慢得多。但是哪种方法在概念上更好?

1 个答案:

答案 0 :(得分:2)

主要考虑因素是性能,代码的可读性/清晰度以及可维护性。

如果性能不是您所说的问题,那么清晰度和可维护性是主要因素。纯Python / Django代码通常比在Python代码中将SQL查询作为字符串内联而更清晰地阅读并遵循其目的。根据我的经验,SQL查询作为字符串也很难维护,因为如果模型更改且查询不再有效,它们不会抛出语法错误。该问题将在运行时找到。

最终,可读性和可维护性问题主要依赖于您和任何其他维护者,因为它需要清晰可维护。在我看来,SQL字符串方法不太清晰,更脆弱。