[英]Django ORM object.related.id vs object.related_id after used select_related('related')
假设我们有这个模型:
class Product(models.Model):
....
price = models.DecimalField(max_digits=12, decimal_places=2)
class Order(models.Model):
....
product= models.ForeignKey(Product)
在使用 select_related 进行像Order.objects.filter(...).select_related('product')
这样的查询之后, order.product.id
和order.product_id
之间是否有任何性能差异?
会有区别,但与数据库无关。 访问 Python 中的任何 object 字段时,总会有性能成本,因此对于指定的示例:
order.product.id
需要从 2 个不同的 object 中获取 2 个不同的属性,首先它需要从order
中获取product
属性,然后需要从product
中获取id
。
order.product_id
只需要从order
中获取 1 个属性: product_id
。
这纯粹是关于从 memory 中获取正确的数据,这在 Python 中不是免费的,它不涉及任何 IO 到数据库或其他资源。 在很多情况下,这个成本非常小,可以省略,因为在您的代码中可能会有更多类似的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.