将原始SQL查询转换为Django ORM

时间:2019-01-17 16:16:11

标签: mysql sql django django-orm

我的项目中有3个这样的模型:

kubectl apply -f dir

因此,在我的数据库中,有以下三个表:

class Model_A(Models.Model):
  field_a_1 = models.IntegerField()
  ...other fields...

class Model_C(models.Model):
   field_c_1 = models.IntegerField()
   field_c_2 = models.IntegerField()
   ...other fields...

class Model_B(Model_C):
   table_a_fk_id = ChainedForeignKey(Model_A, .... ) 
   ...other fields...

并且我需要一个查询来检索像这样的输出数据:

Table_A(id, name, field_a_1, ...other fields....)                    
Table_B(id, table_a_fk_id, table_c_fk_id, .....other fields...)     
Table_C(id, field_c_1, field_c_2, ...other fields....) 

我已经通过原始sql查询解决了该问题,但是我不知道在Django ORM中该怎么做。 这是我的SQL代码:

Table_A_id  Table_A_name                count
------------------------------------------------
12          Table_A_name_12               138
1           Table_A_name_1                133
13          Table_A_name_13                55
15          Table_A_name_15                38
9           Table_A_name_9                 34
7           Table_A_name_7                  0
19          Table_A_name_19                 0

我想在Django ORM中翻译上述sql,以避免执行原始sql查询。

1 个答案:

答案 0 :(得分:0)

实际上,可以争论的是,在这种情况下,您被要求让Django执行“原始查询”是合理的,当然您可以这样做。

我要说的是-明确。您正在做的事情显然很复杂,但 用SQL语法简洁地描述了,这对所有程序员都是众所周知的。 (而且,如果需要的话……众所周知,它不可避免地会……很容易更改。)

因此,我认为我有理由在这里使用直接SQL是有道理的。如果我是您的团队负责人,那可能就是我的建议。