【发布时间】:2017-11-03 21:56:09
【问题描述】:
我正在学习 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]
如您所见,这不是一个小查询 - 我正在提取大量特定的相关数据并进行一些字符串操作。我比较关心性能,所以我尽我所能通过使用select_related() 和values() 来提高效率,只得到我需要的东西。
我的问题是,从概念上和广义上讲,在什么时候使用参数化 SQL 而不是使用 ORM 编写查询会变得更快(因为 ORM 必须首先“翻译”上述“混乱” )?我应该在多大的查询复杂度级别切换到原始 SQL?
任何见解都会有所帮助。谢谢!
【问题讨论】:
标签: python sql django postgresql django-orm