首页 > 解决方案 > 从 Django 模型中加载表中的所有数据运行查询

问题描述

我想知道我们如何在完全加载到内存后从数据中运行查询,以防止它每次都访问数据库

这是我的模特

class empdb(models.Model):
    empid   = models.CharField(max_length=8,primary_key=True)
    empname = models.CharField(max_length=255)
    empdept = models.CharField(max_length=255)
    class Meta:
        ordering = ('empid',)
    def __str__(self):
        return self.empid

这就是我正在尝试的

record = empdb.objects.all()   ' This will load all data in "record"

现在如何根据我们的查询从中读取并提取数据

我正在尝试以下查询以找出哪些员工是人力资源部门的一部分

   dataset=backuprecord.filter(empdept='HR')
   print(dataset)

现在这是我卡住的地方。我得到的输出很好,它确实列出了我得到的数据,但它的形式如下

<QuerySet [<empid: 10010>,<empid: 10121>,<empid: 12235>,<empid: 18110>]>

我想从上面的查询集中取出 empid 和 empname

我该怎么做?

我想要的是以下变量中的数据

for i  in <length of query set> 
    foundempid[i] =  ''' The Employee ID from the queryset Line 
    foundempname[i] = ''' The Employee Name

对此的任何帮助将不胜感激。

标签: djangodjango-models

解决方案


您可以使用values这样的功能。

empdb.objects.filter(your_filter_params).values('empid', 'empname')

这将为您提供字典列表。

[{'empid': 1212, 'empname': '姓名'}, {'empid': 1212, 'empname': '姓名'}]

您可以像这样以列表形式获得它。

empids = empdb.objects.filter(your_filter_params).values_list('empid', flat=True)
empnames = empdb.objects.filter(your_filter_params).values_list('empname', flat=True)

推荐阅读