您当前的位置: 首页 >  django

壹小俊

暂无认证

  • 1浏览

    0关注

    885博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Django第七课之常用查询及表关系的实现

壹小俊 发布时间:2019-04-01 20:25:52 ,浏览量:1

我们在上节课中呢学到了如何创建表和表的基本增删改查,这节课我们学习常用的查询和表的基本关系。

all():获取所有

first():获取第一条

last():获取最后一条

get(**kwargs):根据条件获取一条数据,没有或者获取到多个就会报错。

filter(**kwargs):根据条件获取数据

exclude(**kwaegs):排除条件以外的数据,作用跟filter一样

order_by(*fields):根据字段排序,默认是asc,在字段前加一个负号就是desc

切片使用列表的切片语法操作query,除了不能用负索引,其他的都可以,它等价于LIMIT与OFFSET子句

values(*fields)返回queryset, 这个queryset返回的是一个字典列表。参数fields指定了select中我们想要限制查询的字段。返回的`字典`列表中,只会包含我们指定的字段。如果不指定,包含所有字段。

 only(*fields)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,only一定包含主键。 - defer(*fields) 用法与only相反 - 多条件OR连接,需要实现OR条件,我们要使用Q对象。   ```   from django.db.models import Q    res = Student.objects.filter(Q(age=18)|Q(age=19)).only('name')    # 等价于下面的sql   SELECT `teacher_student`.`id`, `teacher_student`.`name` FROM `teacher_student` WHERE (`teacher_student`.`age` = 18 OR `teacher_student`.`age` = 19)   ``` - 查询条件   - exact    精确匹配   field  like  ‘value’   - iexact     忽略大小写   - contains   field  liek   ‘%value%’   - icontains   - in 后面的值是一个列表   - gt   grate  than   - gte  grate than equ   - lt  less than   - lte    - startswith  以什么什么开始 field like ‘value%’     - istartswith   - endswith  以什么结束 field like ‘%value’   - iendswith   - range  范围区间 between to   - isnull is NULL     语法都是`field__conditon`  是 两个下划线

- count() 返回queryset的长度 统计长度(from django.db.models import Count) - 聚合函数   - Avg 平均值(from django.db.models import Avg)     ```     # 计算同学们的年龄平均值     res = Student.objects.aggregate(age_avg=Avg('age'))       ```   - Max 最大值     ```     # 找到最大的年龄     res = Student.objects.aggregate(age_max=Max('age'))      ```   - Min 最小值   - Sum求和     - 分组,聚合,分组需要结合values,annotate和聚合方法看下面的案例   ```   # 查询男生女生分别有多少人   In [84]: from django.db.models import Count                                                                In [85]: res = Student.objects.values('sex').annotate(Count('sex'))     ``` ## 2. 常用模型字段类型 ## 3. 表关系实现 django  中,模型通过特殊的字段进行关系连接 - 一对一 关联方式:在副表类中添加:models.OneToOneField('主表类',on_delete=models.CASADE) - 一对多 关联方式:在一表类中添加:models.ForeignKey('多表类',on_deleter=models.SET_NULL) - 多对多 关联方式:因为多对多会出现第三张表,所以的手动创建中间表,     在多表类中添加:models.ManyToManyField('多表类',through='中间表类名称')     在中间表中添加:models.ForeignKey('多表类',on_deleter=models.CASADE)                   models.ForeignKey('多表类',on_deleter=models.CASADE)

关注
打赏
1664335782
查看更多评论
立即登录/注册

微信扫码登录

0.0403s