Запрос данных в Django:
(1) Общие методы запроса:
- Получить все записи:
s = User.objects.all()
- Получите первую часть данных:
s = User.objects.first()
- Получите последнюю часть данных:
s = User.objects.last()
Замечания по поводу второго и третьего методов: Для объекта QuerySet мы также можем получить соответствующий экземпляр объекта через значение нижнего индекса. Как показано ниже, хотя эти два метода имеют одну и ту же функцию (получение соответствующего объекта экземпляра), рекомендуемыми (и обычно используемыми) методами являются метод first() и метод last(). Причина — если запрошенные данные не существуют, будет сообщено об ошибке с помощью запроса нижнего индекса; однако использование метода first() не сообщит об ошибке и вернет None.
s = User.objects.filter(age=18).first() #获取QuerySet中的第一条数据
s2 = User.objects.filter(age=18).last() #获取QuerySet中的最后一条数据
s = User.objects.filter(age=18)[0]
print(s)
Сценарии применения:
a = User.objects.get(id=56) #使用get方法获取一个实例对象,我们可以保证id不会重复,但是不能保证id为56的数据是否存在
#但是使用.first()方法哪怕它不存在也不会报错!
a = User.objects.filter(id=56).first()
- Получить отфильтрованные записи на основе условий, заданных параметрами:
[Примечание: метод filter(**kwargs): получить отфильтрованный QuerySet в соответствии с условиями извлечения, указанными в параметрах]
s = User.objects.filter(name= "xiaoming" ) # 过滤得到name为xiaoming的数据
- Исключить данные с именем xiaoming:
s = User.objects.exclude(name='xiaoming')
- Получить объект записи:
[Примечание: объект, возвращаемый get, имеет уникальные свойства. Если есть несколько объектов, соответствующих условиям, get сообщит об ошибке! 】
s = User.objects.get(name = "xiaoming" )
- Отсортируйте результаты:
#根据age升序排序:
c = User.objects.all().order_by("age")
#根据age逆向排序:
c2 = User.objects.all().order_by("-age")
#双重排序:age升序排序,如果有age相同的则以id升序排序:
c3 = User.objects.all().order_by("age","id")
- Преобразуйте модель в возвращенном QuerySet в словарь:
s = User.objects.all().values()
#作用:现在是字典形式了(之前的QuerySet是类似于列表的对象),就可以使用字典的方法进行获取数据了:
print(s[0].get("name"))
Формат объекта QuerySet:
<QuerySet [<User: name:taka, age:18>, <User: name:xiaopo, age:18>, <User: name:xiaohong, age:18>]>
Формат преобразуется с помощью метода values():
<QuerySet [{'id': 1, 'name': 'taka', 'age': 18}, {'id': 2, 'name': 'xiaopo', 'age': 18}, {'id': 3, 'name': 'xiaohong', 'age': 18}]>
- Получите общее количество запрошенных данных:
e = User.objects.count() # (所有QuerySet对象都可以使用此方法)
(2) Условия часто используемых объектов запроса:
Условие найти объект означает, что некоторые параметры передаются вышеуказанному методу. Это эквивалентно условию после оператора where в операторе SQL, а синтаксис — это правило имени поля __!
- точно эквивалентно знаку равенства: (следующие два метода работают одинаково!)
rs = User.objects.filter(name__exact='xiaoming')
rs = User.objects.filter(name='xiaoming')
-
iexact: аналогично точному, но игнорирует соответствие регистра.
-
содержит содержит:
rs = User.objects.filter(name__contains='xiao') #查询name属性值中包含xiao的
- icontains похож на contains, но игнорирует регистр.
- С чего начинается:
rs = User.objects.filter(name__startswith='xiao') # 查询name属性值以xiao开头的
- startwith аналогичен startwith, но игнорирует регистр.
- Что означает endwith end with: .
- isendwith похож на endwith, но игнорирует регистр.
- Член принадлежит:
rs = User.objects.filter(age__in=[18,19,20]) # 查询age值为18,19,20的数据
- gt больше, чем
rs = User.objects.filter(age__gt=20) # 查询age值大于20的数据
- gte больше или равно.
- л меньше чем.
- lte меньше или равно.
- Диапазон дальности, включая оба конца.
rs = User.objects.filter(age__range=(18,20)) # 查询age值在18-20之间的数据(包含18和20)
- isnull определяет, является ли он пустым.
❤️Вы можете отсканировать код, чтобы подписаться на мой официальный аккаунт - любые вопросы можно задавать в официальном аккаунте (там будет специальный человек, который будет на них регулярно отвечать), а галантерея будет время от времени обновляться. Добро пожаловать, чтобы обратить внимание! ❤️