MySQL之查询filter()和get()

发布于 2022-03-02  2 次阅读


filter()过滤

book_list=list(BOOK.objects.filter(book_name__contains=select).values())

filter即过滤筛选,book_name即筛选条件,__contains表示模糊查询,但是只支持把book_name当成整体的模糊查询,values空参表示获取所有值,如果加book_name表示只获取筛选出对象的book_name值。
注意__contains是两个下划线 _ _
values()的s别忘了

__exact 精确等于 like ‘aaa’ 
__iexact 精确等于 忽略大小写 ilike ‘aaa’ 
__contains 包含 like ‘%aaa%’ 
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。 
__gt 大于 
__gte 大于等于 
__lt 小于 
__lte 小于等于 
__in 存在于一个list范围内 
__startswith 以…开头 
__istartswith 以…开头 忽略大小写 
__endswith 以…结尾 
__iendswith 以…结尾,忽略大小写 
__range 在…范围内 
__year 日期字段的年份 
__month 日期字段的月份 
__day 日期字段的日 
__isnull=True/False 
__isnull=True 与 __exact=None的区别

Q包

from django.db.models import Q
Feeds.objects.filter( Q(openid = "A") | Q(openid = "B"))

# 等同于 Feeds.objects.filter(openid__in=["A", "B"])  或者  Feeds.objects.filter(openid__range=["A", "B"]) 
# __in 和 __range 应该是有区别的, __range最适用的场景应该是时间段的查询
# 还可以进行反向过滤~Q
answer = list(Answers.objects.filter(~Q(floor_B=0), toQuestion_id=question_id, floor_A=i).values())

get()函数

session=Session.objects.get(stuid=stuid_client).session

get()获取的就是一个对象了, 所以里面参数只能写该模型的唯一标识, 而filter()获取的是所以满足条件的,返回的是一个列表

介绍几个常用函数

map()

book_list = list(map(str, book_list))
book_list = list(set(book_list))
book_list = list(map(eval, book_list))

map(A,B)可以将A作用在B的每个元素上, set()集合可以去除list列表中重复的元素, 由于字典不能相互比较, 于是采用将字典转字符串, 做比较后, 再去除字符串

update()

user = Users.objects.get(openid=openid)
score = user.score+10
user.update("score"=score)

或者

user = Users.objects.get(openid=openid)
score = user.score
user.score = score+10
user.save() # 一定要保存