对象
exist():判断查询的数据是否存在,存在返回True,否则返回False,返回布尔值
六、 单表查询的双下划线
- 条件判断,相当于SQL中的while
- __gt:大于
- ret = models.Person.objects.filter(pk__gt=1)
- __lt:小于
- ret = models.Person.objects.filter(pk__lt=3)
- __gte:大于等于
- ret = models.Person.objects.filter(pk__gte=1)
- __lte:小于等于
- ret = models.Person.objects.filter(pk__lte=3)
- __range:范围查询,相当于SQL的between...and...
- ret = models.Person.objects.filter(pk__range=[1,3])
- __in:成员判断
- ret = models.Person.objects.filter(pk__in=[1,3])
- ret = models.Person.objects.exclude(pk__in=[1,3])
- 获取pk不等于1和3的,相当于SQL的 not in
- 模糊查询:相当于SQL的 like 和正则匹配
- __contains:模糊查询
- ret = models.Person.objects.filter(name__contains='A')
- __icontains:在contains的基础上,对条件中的字母大小写不敏感
- ret = models.Person.objects.filter(name__icontains='A')
- 获取name字段的值包含'A'或'a'的,忽略大小写
- 判断以...开头/结尾
- __startswith:以...开头
- ret = models.Person.objects.filter(name__startswith='A')
- __istartswith:在startswith的基础上,对条件中的字母大小写不敏感
- ret = models.Person.objects.filter(name__istartswith='A')
- 获取name字段的值以'A'或'a'开头的,忽略大小写
- __endswith:以...结尾
- ret = models.Person.objects.filter(name__endswith='A')
- __iendswith:在endswith的基础上,对条件中的字母大小写不敏感
- ret = models.Person.objects.filter(name__iendswith='A')
- 获取name字段的值以'A'或'a'结尾的,忽略大小写
- __year:判断日期年份
- ret = models.Person.objects.filter(birth__year='2019')
- __year只能筛选年份,如果要筛选年月日,使用contains:模糊查询
- ret = models.Person.objects.filter(birth__contains='2018-06-24')
- __isnull:查询与null的项
- __isnull = True:查询值是null的
- ret = models.Person.objects.filter(phone__isnull=True)
- __isnull = False:查询值不是null的
七、 ForeignKey操作
基于对象的查询
book_obj = models.Book.objects.get(title='菊花怪大战MJJ')
book_obj.pub
book_obj.pub.name
- 反向查询,语法:对象.表名_set.all(),表名即类名小写
- 设置ForeignKey的参数:related_name,相当于替换了类名小写_set
pub_obj = models.Publisher.objects.get(pk=1)
# 没有指定related_name,使用类名小写_set
pub_obj.book_set.all()
# 指定related_name='books'
pub_obj.books.all()
基于字段的查询
# 查询老男孩出版的书
ret = models.Book.objects.filter(pub__name='老男孩出版社')
- 反向查询,语法:表名__字段
- 设置ForeignKey的参数:related_query_name,相当于替换了表名
# 查询出版菊花怪大战MJJ的出版社
# 没有指定related_name,使用类名的小写
ret= models.Publisher.objects.filter(book__title='菊花怪大战MJJ')
# related_name='books'
ret= models.Publisher.objects.filter(books__title='菊花怪大战MJJ')
# related_query_name='xxx'
ret= models.Publisher.objects.filter(xxx__title='菊花怪大战MJJ')
八、 多对多的操作
基于对象的查询
mjj = models.Author.objects.get(pk=1)
mjj.books # 关系管理对象
mjj.books.all()
- 反向查询,语法:对象.类名小写_set.all()
- 设置related_name,相当于替换了类名小写_set
book_obj = models.Book.objects.filter(title='桃花侠大战菊花怪').first()
# 不指定related_name
book_obj.author_set # 关系管理对象
book_obj.author_set.all()
# 指定related_name='authors'
book_obj.authors # 关系管理对象
book_obj.authors.all()
基于字段的查询
|