Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django orm中使用In语句_Python_Sql_Django - Fatal编程技术网

Python 在django orm中使用In语句

Python 在django orm中使用In语句,python,sql,django,Python,Sql,Django,我有三张桌子 Table1 Table2 Category ====== ================= ============== id, name id, Table1_id, name category_id, Table2_id, name 现在给定一个类别id,我必须在表1中找到属于该类别id的名称 我能想到的唯一解决办法就是做两个这样的查询 similar_ids = Table2.o

我有三张桌子

Table1       Table2                   Category
======       =================        ==============
id, name     id, Table1_id, name      category_id, Table2_id, name
现在给定一个类别id,我必须在表1中找到属于该类别id的名称

我能想到的唯一解决办法就是做两个这样的查询

similar_ids = Table2.objects.filter(category__category_id=_cat_id).values_list('id')

similar_names = Table1.objects.filter(table2__id__in=similar_ids).values_list('name').distinct()
这是一种在单个查询中实现的方法

另外,考虑到3个表的大小
(表1==30000行,表2和类别==125000行)
正确的做法是:

  • 通过一次联接所有表来进行单个查询
  • 将其分成两部分(如上所述)

  • 从django的角度来看,您表示模型的方式相当模糊。也就是说,在这种情况下很难使用正确的
    相关名称。但是让我们试试看。您希望:

    Table1.objects.filter(table2_set__category_set__id=myid).values_list('name')
    

    Django不会为原始查询生成两个查询。如果您使用table2\uuuu id\uuuu in=similor\u id,Django将自动使用子查询