Django数据库增删改查
django匹配符的使用及说明
匹配符号 |
使用 |
说明 |
__exact |
filter(job_exact='开发') |
精确等于,如SQL的like '开发' |
__iexact |
filter(job_iexact='开发') |
精确等于并忽略大小写 |
__contains |
filter(job__contains='开发') |
某匹配,如SQL的like '%荣耀%' |
__icontains |
filter(job__icontains='开发') |
模糊匹配,忽略大小写 |
__gt |
filter(id__gt=5) |
大于 |
__gte |
filter(id__gte=5) |
大于等于 |
__lt |
filter(id__lt=5) |
小于 |
__lte |
filter(id__lte=5) |
小于等于 |
__in |
filter(id__in=[1,2,3]) |
判断是否在列表内 |
__startswith |
filter(job__startswith='开发') |
以……开头 |
__istartswith |
filter(job__istartswith='开发') |
以……开头并忽略大小写 |
__endswith |
filter(job__endswith='开发') |
以……结尾 |
__iendswith |
filter(job__iendswith='开发') |
以……结尾并忽略大小写 |
__range |
filter(job__range='开发') |
在……范围内 |
__year |
filter(job__year=2018) |
日期字段的年份 |
__month |
filter(job__month=12) |
日期字段的月份 |
__day |
filter(job__day=30) |
日期字段的天数 |
__isnull |
filter(job__isnull=True/False) |
判断是否为空 |
取别名
.annotate(user_name=F('create_by__name'))
group by,这里顺序不能搞错
Model.objects.values('name').annotate(Count('name')).filter(is_del=0).all()
update_or_create
第一次是新增数据
d = dict(firsts='儿童早教', seconds='儿童玩具')
t = Types.objects.update_or_create(**d)
#第二次是修改数据
t = Types.objects.update_or_create(**d,defaults={'firsts':'教育资料'})
update_or_create 是根据自带你d的内容查找数据表的数据,如果能找到相匹配的数据,就执行数据修改,修改内容以自带你格式传递给参数defaults即可;如果在数据表找不到撇皮的数据,就姜自带你d的数据新增到数据表里。
bulk_create
t1 = Types(firsts='儿童用品', seconds='儿童玩具')
t2 = Types(firsts='儿童用品', seconds='纸尿裤')
obj_list = [t1,t2]
Types.objects.bulk_create(obj_list)
在使用bulk_create之前,数据类型未模型Types的实例化对象,并且在实例化过程中设置每个字段的值,最后所有的实例化对象放置在列表或元组里,以参数的形式传递给bulk_create,从而实现数据的批量新增操作。
Filter
不在这个范围内not_in=django_filters.NumericRangeFilter(field_name="pid",lookup_expr='range',exclude=True)