【问题标题】:Django JOIN: raw sql vs. in memoryDjango JOIN:原始 sql 与内存中的对比
【发布时间】:2015-10-27 00:52:23
【问题描述】:

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

  1. 使用原始 sql 查询,或
  2. 使用两个查询集并在内存中执行连接以注释其中一个。

我可以在线性时间内加入两个查询集,所以我不认为 2. 会明显变慢。但是哪一种方法在概念上更好?

【问题讨论】:

  • 2.听起来很像prefetch_related。你到底想做什么?
  • 问题是 JOIN 不是在外键上完成的。该字段是一个日期,我想返回有多少其他记录具有该日期。这是我在stackoverflow.com/questions/31798858/… 之前发布的相关问题
  • 具体的例子有帮助。请参阅我对您的链接问题的回答。

标签: django django-models orm django-orm


【解决方案1】:

主要考虑因素是性能、代码的可读性/清晰性和可维护性。

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

最终,可读性和可维护性问题主要取决于您和任何其他维护人员,因为它需要对您来说清晰且可维护。在我看来,SQL 字符串的方法不够清晰,也更脆弱。

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 2020-10-21
    • 1970-01-01
    • 2012-06-03
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多