Mysql Django中sql连接的等效ORM查询是什么

Mysql Django中sql连接的等效ORM查询是什么,mysql,django,django-models,Mysql,Django,Django Models,我有两个django模型,它们彼此没有关系,但有共同的JID(我没有将其作为外键): 我想在ORM中实现此sql查询: 挑选* 结果 参加工作 ON job.JID=result.JID 基本上,我希望联接两个表,然后对该表执行筛选查询 我是ORM和Django的新手。我不知道如何在Django ORM中做到这一点,但这是我的2美分: 任何ORM都使99%的查询非常容易编写(无需任何SQL)。对于剩下的1%,您有两个选择:理解ORM的核心并添加自定义代码,或者只编写纯SQL。我建议您为它编写S

我有两个django模型,它们彼此没有关系,但有共同的JID(我没有将其作为外键):

我想在ORM中实现此sql查询: 挑选* 结果 参加工作 ON job.JID=result.JID

基本上,我希望联接两个表,然后对该表执行筛选查询


我是ORM和Django的新手。

我不知道如何在Django ORM中做到这一点,但这是我的2美分:

  • 任何ORM都使99%的查询非常容易编写(无需任何SQL)。对于剩下的1%,您有两个选择:理解ORM的核心并添加自定义代码,或者只编写纯SQL。我建议您为它编写SQL查询

  • 如果表resultjob都有一个JID,为什么不将其设为外键?我觉得很奇怪

  • 类名以大写字母开头,class*R*esult,class*J*ob


    • 我不知道用Django ORM怎么做,但这是我的2美分:

      • 任何ORM都使99%的查询非常容易编写(无需任何SQL)。对于剩下的1%,您有两个选择:理解ORM的核心并添加自定义代码,或者只编写纯SQL。我建议您为它编写SQL查询

      • 如果表resultjob都有一个JID,为什么不将其设为外键?我觉得很奇怪

      • 类名以大写字母开头,class*R*esult,class*J*ob


      通过修改以下结果类,可以在Django模型中表示外键:

      class result(models.Model):
        rid = models.IntegerField(primary_key=True, db_column='RID') 
        # jid = models.IntegerField(null=True, db_column='JID', blank=True)
        job = models.ForeignKey(job, db_column='JID', blank=True, null=True, related_name="results")
        test_case = models.CharField(max_length=135, blank=True)
      
      (我在某个地方读到,您需要同时添加
      blank=True
      null=True
      以使外键在Django中成为可选的,您可以尝试不同的选项)

      现在,您只需编写以下内容即可访问结果的作业:

      myresult.job # assuming myresult is an instance of class result
      
      使用参数
      related_name=“results”
      ,Django会自动将一个新字段添加到类
      作业
      ,因此您可以编写:

      myjob.results
      
      并获取作业
      myjob
      的结果

      这并不意味着Django ORM必须通过连接查询获取它(它可能是另一个查询),但从代码的角度来看效果是相同的(性能考虑除外)


      您可以在中找到有关
      模型的详细信息。ForeignKey

      您可以通过如下修改在Django模型中表示外键:结果类:

      class result(models.Model):
        rid = models.IntegerField(primary_key=True, db_column='RID') 
        # jid = models.IntegerField(null=True, db_column='JID', blank=True)
        job = models.ForeignKey(job, db_column='JID', blank=True, null=True, related_name="results")
        test_case = models.CharField(max_length=135, blank=True)
      
      (我在某个地方读到,您需要同时添加
      blank=True
      null=True
      以使外键在Django中成为可选的,您可以尝试不同的选项)

      现在,您只需编写以下内容即可访问结果的作业:

      myresult.job # assuming myresult is an instance of class result
      
      使用参数
      related_name=“results”
      ,Django会自动将一个新字段添加到类
      作业
      ,因此您可以编写:

      myjob.results
      
      并获取作业
      myjob
      的结果

      这并不意味着Django ORM必须通过连接查询获取它(它可能是另一个查询),但从代码的角度来看效果是相同的(性能考虑除外)


      您可以找到有关
      模型的更多信息。中的ForeignKey

      jid=1将只给我1个值。此外,我无法从结果表中访问值。但您能告诉我如何获取所有值吗?只需对结果进行另一个筛选,并使其与jid中的值相等,如jid__in=resulth我可以访问结果表值。因为我只能访问作业表值。是否可能jobs.test_case(test_case在结果表中)jid=1只会给我1个值。此外,我无法从结果表中访问值。但您能告诉我如何获取所有值吗?只需对结果进行另一个筛选,并使其与jid中的值相等,如jid__in=resulth我可以访问结果表值。因为我只能访问作业表值。测试用例(测试用例在结果表中)我把JID作为外键。现在有办法创建查询了吗?我将JID作为外键。现在有办法创建查询了吗?