面试提升必备全面解析iOS中的Runtime机制

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"

猜你喜欢

转载自blog.csdn.net/qhd1860/article/details/85158046
今日推荐