1、基本操作
- 增
models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs insert into Tb1 (c1,c2) values ('xx','00') obj = models.Tb1(c1='xx', c2='oo') obj.save() insert into Tb1 (c1,c2) values ('xx','00') # get_or_create() 如果纯在则获取,否者创建 obj, created = models.UserInfo.objects.get_or_create(name='summer1', defaults={'age':123,'pwd':'ab456'}) # 先根据条件去查,如果存在name='summer1',则后面的default无效不执行。 print(obj,created) # created 为True或False # update_or_create() 如果存在,则更新,否则,创建 obj, created = models.UserInfo.objects.update_or_create(name='summer1', defaults={'age':123,'pwd':'ab456'}) print(obj,created)
- 查
models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议) select * from Tb1 where id=123 limit 1 models.Tb1.objects.all() # 获取全部 select * from Tb1 models.Tb1.objects.filter(name='seven') # 获取指定条件的数据 select * from Tb1 where name='seven' # exists() # 检查查询结果是否存在,返回True或False result = models.UserInfo.objects.filter(id=1111).exists() print(result)
- 删
models.Tb1.objects.filter(name='seven').delete() # 删除指定条件的数据 delete from Tb1 where name='seven'
- 改
models.Tb1.objects.filter(name='seven').update(gender='0') # 将指定条件的数据更新,均支持 **kwargs update Tb1 set gender='0' where name='seven' obj = models.Tb1.objects.get(id=1) obj.c1 = '111' obj.save() # 修改单条数据 update Tb1 set c1 = '111' where id=1
2、进阶操作(了不起的双下划线)
利用双下划线将字段和对应的操作连接起来
-
获取个数
models.Tb1.objects.filter(name='seven').count() select count(*) from Tb1 where name='seven'
-
大于,小于
models.Tb1.objects.filter(id__gt=1) # 获取id大于1的值 select * from Tb1 where id>1 models.Tb1.objects.filter(id__gte=1) # 获取id大于等于1的值 select * from Tb1 where id>=1 models.Tb1.objects.filter(id__lt=10) # 获取id小于10的值 select * from Tb1 where id<10 models.Tb1.objects.filter(id__lte=10) # 获取id小于等于10的值 select * from Tb1 where id<=10 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值 select * from Tb1 where id<10 and id>1
-
in
models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据 select * from Tb1 where id in (11, 22, 33) models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in select * from Tb1 where id not in (11, 22, 33)
-
isnull
Entry.objects.filter(pub_date__isnull=True) select * from Tb1 where pub_date is null
-
contains
models.Tb1.objects.filter(name__contains="ven") select * from Tb1 where name like binary '%ven%' models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 select * from Tb1 where name like '%ven%' models.Tb1.objects.exclude(name__icontains="ven") select * from Tb1 where name not like '%ven%'
-
range
models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and select * from Tb1 where id bettwen 1 and 2
-
其他类似
startswith,istartswith, endswith, iendswith, startswith select * from Tb1 where name like 'ven%' endswith select * from Tb1 where name like '%ven'
-
order by
models.Tb1.objects.filter(name='seven').order_by('id') # asc select * from Tb1 where name='seven' order by id asc models.Tb1.objects.filter(name='seven').order_by('-id') # desc select * from Tb1 where name='seven' order by id desc
-
group by
from django.db.models import Count, Min, Max, Sum models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num')) SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"