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

版权声明:只要点赞,这篇文章就是你的。 https://blog.csdn.net/weixin_36691991/article/details/88941059

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

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. 常用模型字段类型

<https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types>





## 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)

猜你喜欢

转载自blog.csdn.net/weixin_36691991/article/details/88941059
今日推荐