我想知道如何在完全加载到内存中后如何从数据中运行查询,以防止它每次都访问数据库
这是我的模特
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
任何帮助,将不胜感激。
答案 0 :(得分:1)
dataset=backuprecord.filter(empdept='HR')
在dataset
中,您将得到queryset。 Django进行数据库查询,并使用ORM将其转换为Model实例。实例的集合称为查询集。现在,当您要获取模型实例(表中的一行中的ORM)时,可以执行many ways。在这里,如果要访问dataset
中的所有对象,则可以简单地循环访问它,并且像每个对象一样,可以通过<object>.attribute_name
获取值。例如:
dataset=backuprecord.filter(empdept='HR')
for data in dataset:
print(data.emdid)
print(data.empname)
答案 1 :(得分:0)
dataset=empdb.objects.filter(empdept='HR').values('empdid','empname')
for data in dataset:
print data['empdid'], data['empname']
我建议您以大写字母开头一个类名,因为这是标准的做法。例如,将类名命名为class Empdb
答案 2 :(得分:0)
您可以像这样使用values
函数。
empdb.objects.filter(your_filter_params).values('empid', 'empname')
这将为您提供词典列表。
[{'empid':1212,'empname':'Name'},{'empid':1212,'empname':'Name'}]
您可以像这样以列表形式获取它。
empids = empdb.objects.filter(your_filter_params).values_list('empid', flat=True)
empnames = empdb.objects.filter(your_filter_params).values_list('empname', flat=True)
答案 3 :(得分:0)
.all()
在这里record = empdb.objects.all()
是多余的,您可以直接执行empdb.objects.filter(empdept='HR')
,而无需在这里获取所有内容然后进行查询
empdb.objects.filter(empdept="HR").values('empid)
获取所需的值,或者values()
获取字典中的所有数据
答案 4 :(得分:0)
我认为这就是你的做法。
dataset= empdb.objects.filter(empdept='HR').value_list('empid','empname')
zipped_data = zip(range(len(dataset)),dataset) #python 2.7
zipped_data = list(zip(range(len(dataset)),dataset)) #python 3.6
for i, data in zipped_data:
foundempid[i] = data[0] The Employee ID from the queryset Line
foundempname[i] = data[1] The Employee Name
如果遇到任何问题,请告诉我。