Django獲取指定列的數據

model一般都是有多個屬性的,但是很多時候我們又只需要查詢特定的某一個,這個時候可以用到valuesvalues_list

二者簡介

[values()](https://docs.djangoproject.com/en/1.9/ref/models/querysets/#values)
values()¶

values(*fields)¶
Returns a QuerySet that returns dictionaries, rather than model instances, when used as an iterable.

Each of those dictionaries represents an object, with the keys corresponding to the attribute names of model objects.
[values_list()](https://docs.djangoproject.com/en/1.9/ref/models/querysets/#values-list)
values_list()¶

values_list(*fields, flat=False)¶
This is similar to values() except that instead of returning dictionaries, it returns tuples when iterated over. Each tuple contains the value from the respective field passed into the values_list() call — so the first item is the first field, etc.

values查詢

from attendence.models import Employee
from attendence.models import EmployeeIP

#獲取一個字段
ipList = EmployeeIP.objects.values("IP").first()
print(type(ipList))
# <class 'dict'>
print(ipList)
# {'IP': '192.168.1.41'}

#獲取多個字段
empList = Employee.objects.values("first_name", "last_name", "email")[0:2]
print(type(empList))
# <class 'django.db.models.query.QuerySet'>
print(empList)
# [
#   {'last_name': 'Wei', 'first_name': 'Vena', 'email': '[email protected]'},
#   {'last_name': 'Wan', 'first_name': 'Mark', 'email': '[email protected]'}
# ]

values_list查詢

ipList = EmployeeIP.objects.values_list("IP").first()
print(type(ipList))
# <class 'tuple'>
print(ipList)
# ('192.168.1.111',)

ipList = EmployeeIP.objects.values_list("IP")[0:2]
print(type(ipList))
# <class 'django.db.models.query.QuerySet'>
print(ipList)
# [('192.168.1.41',), ('192.168.1.44',)]
print(type(ipList[0]))
# <class 'tuple' >
print(ipList[0])
# 192.168.1.111

區別

從上面的代碼中我們可以看到返回結果類型上細微的差別

  • vlaues -
    • 單條記錄 - <class 'dict'>
    • 多條記錄 - <class 'django.db.models.query.QuerySet'>
  • vlaues_list -
    • 單條記錄 - <class 'tuple'>
    • 多條記錄 - <class 'django.db.models.query.QuerySet'>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章