Mysql Django中sql连接的等效ORM查询是什么
我有两个django模型,它们彼此没有关系,但有共同的JID(我没有将其作为外键): 我想在ORM中实现此sql查询: 挑选* 结果 参加工作 ON job.JID=result.JID 基本上,我希望联接两个表,然后对该表执行筛选查询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
我是ORM和Django的新手。我不知道如何在Django ORM中做到这一点,但这是我的2美分:
- 任何ORM都使99%的查询非常容易编写(无需任何SQL)。对于剩下的1%,您有两个选择:理解ORM的核心并添加自定义代码,或者只编写纯SQL。我建议您为它编写SQL查询
- 如果表result和job都有一个JID,为什么不将其设为外键?我觉得很奇怪
- 类名以大写字母开头,class*R*esult,class*J*ob
- 任何ORM都使99%的查询非常容易编写(无需任何SQL)。对于剩下的1%,您有两个选择:理解ORM的核心并添加自定义代码,或者只编写纯SQL。我建议您为它编写SQL查询
- 如果表result和job都有一个JID,为什么不将其设为外键?我觉得很奇怪
- 类名以大写字母开头,class*R*esult,class*J*ob
- 我不知道用Django ORM怎么做,但这是我的2美分:
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作为外键。现在有办法创建查询了吗?