2024-09-23 00:28:41 发布
网友
我无法使用Django ORM执行此查询。 如何进行内部联接,如何进行此查询并仅返回所需的列?
SELECT establecimiento.nombre, categoria.titulo FROM establecimiento INNER JOIN categoria ON establecimiento.categoria = categoria.id
基于您对pdxwebdev的注释中的信息(您声明了外键字段),这很简单。Django自动化了外键关系所需的大部分连接行为。
为了精确地复制该查询,包括只从连接中选择两个字段,values、values_list或only中的任何一个都应该根据您想要返回的Python对象进行复制。例如,这里有一个使用values检索可iterable queryset of dictionary的查询:
values
values_list
only
Establecimiento.objects.values('nombre', 'categoria__titulo')
values_list将检索元组而不是字典,并且only将检索Establecimiento实例,在这些实例上,除这两个模型字段之外的所有模型字段都将被延迟(它们尚未从数据库中检索,但将根据需要进行查找)。
Establecimiento
当您使用__跟踪这样的外键关系时,Django将自动执行内部连接。
__
您还可以对queryset使用select_related来要求它执行联接,即使您没有检索特定字段。例如:
select_related
Establecimiento.objects.select_related('categoria')
这将生成一个SELECT * from ...查询,并返回一个Establecimiento实例的queryset,这些实例的categoria数据已经加载到内存中。
SELECT * from ...
categoria
我不确定我是否理解这个问题。 categoria只需要是categoria模型的外键字段。categoria.id是主键,因此这将自动完成。
只返回某些列,只返回.only()方法。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#only
基于您对pdxwebdev的注释中的信息(您声明了外键字段),这很简单。Django自动化了外键关系所需的大部分连接行为。
为了精确地复制该查询,包括只从连接中选择两个字段,
values
、values_list
或only
中的任何一个都应该根据您想要返回的Python对象进行复制。例如,这里有一个使用values
检索可iterable queryset of dictionary的查询:values_list
将检索元组而不是字典,并且only
将检索Establecimiento
实例,在这些实例上,除这两个模型字段之外的所有模型字段都将被延迟(它们尚未从数据库中检索,但将根据需要进行查找)。当您使用
__
跟踪这样的外键关系时,Django将自动执行内部连接。您还可以对queryset使用
select_related
来要求它执行联接,即使您没有检索特定字段。例如:这将生成一个
SELECT * from ...
查询,并返回一个Establecimiento
实例的queryset,这些实例的categoria
数据已经加载到内存中。我不确定我是否理解这个问题。 categoria只需要是categoria模型的外键字段。categoria.id是主键,因此这将自动完成。
只返回某些列,只返回.only()方法。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#only
相关问题 更多 >
编程相关推荐