Sno*_*wie 2 python sql django postgresql django-orm
我正在学习Django及其ORM数据访问方法,并且有一些我很好奇的东西.在一个特定的端点,我正在进行一些数据库调用(对Postgres) - 下面是一个示例:
projects = Project.objects\
.filter(Q(first_appointment_scheduled=True) | (Q(active=True) & Q(phase=ProjectPhase.meet.value)))\
.select_related('customer__first_name', 'customer__last_name',
'lead_designer__user__first_name', 'lead_designer__user__last_name')\
.values('id')\
.annotate(project=F('name'),
buyer=Concat(F('customer__first_name'), Value(' '), F('customer__last_name')),
designer=Concat(F('lead_designer__user__first_name'), Value(' '), F('lead_designer__user__last_name')),
created=F('created_at'),
meeting=F('first_appointment_date'))\
.order_by('id')[:QUERY_SIZE]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这不是一个小问题 - 我正在提取大量特定的相关数据并进行一些字符串操作.我比较关心性能,所以我尽我所能通过使用来提高效率,select_related()并且values()只能得到我需要的东西.
我的问题是,从概念上和广义上讲,在什么时候使用参数化SQL而不是使用ORM来编写查询变得更快(因为ORM必须首先"翻译"上面的"混乱")?我应该在什么近似的查询复杂度级别切换到原始SQL?
任何见解都会有所帮助.谢谢!
我的问题是,从概念上和广义上讲,在什么时候使用参数化SQL而不是使用ORM来编写查询变得更快(因为ORM必须首先"翻译"上面的"混乱")?
如果你问的是性能,从不.
与实际执行该查询所花费的时间相比,将ORM查询转换为SQL所花费的时间非常短.Braincells是不可替代的,服务器很便宜.
如果您真的关心性能,首先要看的是索引.尝试打印出ORM生成的每个查询,并通过为EXPLAIN ANALYZE添加前缀在psql控制台中运行它们.
我应该在什么近似的查询复杂度级别切换到原始SQL?
如果你问的是编码的简易性,那取决于.
如果查询非常难以使用ORM编写并且它是不可读的,是的,那么使用原始查询就完全没问题了.
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |