首页 > 解决方案 > 使用 django 模型进行复杂查询

问题描述

我在我的数据库模型中创建了一个包含 6 个连接和 10 列的视图,目前它显示了大约 86.000 行。我尝试通过 objects.all() 查询所有行,然后根据用户交互进行过滤(POST 发送的表单数据,然后选择适当的 .filter(*args) 查询)之后我尝试通过以下方式获取查询集的长度使用 count() 因为此方法不评估查询。但是由于视图在列上没有索引,所以 count() 方法需要很长时间。

我搜索了实现视图的解决方案,但这在 mysql 中是不可能的。

然后我搜索了一个解决方案,它可以通过仅使用 django 中的 6 个连接和过滤参数而不是创建视图来替换初始的 .all() ,因此索引仍然可用。但我找不到该问题的解决方案。

或者也许将视图中的每一行与另一个表结合起来,这样我就可以使用另一个表的索引来更快地查询?:

SELECT * FROM View LEFT JOIN Table ON (View.id = Table.id)

我感谢每一个答案

标签: pythonmysqldjangomariadb

解决方案


在下面试试这个:

from django.db import models

# I think below is your table structure
class Table(models.Model):
    pass

class View(models.Model):
    table = models.ForeignKey(to=Table)

qs = View.objects.select_related('table').filter(table__isnull=True)
for iterator in qs:
    print(qs)

谢谢 !


推荐阅读