【问题标题】:How to inner join 4 tables in Django?如何在 Django 中内连接 4 个表?
【发布时间】:2020-05-17 02:45:38
【问题描述】:

我们想一次检索所有表记录如何在django orm中实现类似SQL查询。

示例 SQL 查询:

select * 
from Company_info 
inner join Bank_info on Bank_info.manufacturer = Company_info.manufacturer
inner join Company_info on Company_info.manufacturer = Company_info.manufacturer
inner join Transport_info on Transport_info.manufacturer = Company_info.manufacturer

代码:

class Manufacturer(models.Model):
    name = models.CharField(max_length=42)

class Bank_info(models.Model):
    account = models.CharField(max_length=42)
    manufacturer = models.ForeignKey(Manufacturer, on_delete= models.CASCADE)

class Company_info(models.Model):
    name= models.CharField(max_length=42)
    manufacturer = models.ForeignKey(Manufacturer, on_delete= models.CASCADE)

class Transport_info(models.Model):
    name= models.CharField(max_length=42)
    manufacturer = models.ForeignKey(Manufacturer, on_delete= models.CASCADE)

【问题讨论】:

  • 在 FoeignKey 字段中的模型 2、3 和 4 中添加相关名称并使用它。 Manufacturer.objects.all().prefetch_related('related_name2', 'related_name3', 'related_name4')。
  • 谢谢你,它工作得很好

标签: python django postgresql django-models orm


【解决方案1】:

您可以为此使用prefetch_related,如 cmets 中所述:

Manufacturer.objects.all().prefetch_related('related_name2', 'related_name3', 'related_name4')

事实上,这不会执行 SQL INNER JOIN,而是会在 Python 级别连接预取的对象 - 这将减少使用相关对象字段时对 DB 的命中。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2018-11-08
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多