基于django settings源码实现自己的项目
配置文件的可插拔式设计
dir()
importlib
反射
单表查询
只要是queryset对象 就可以无限制的点击queryset对象的方法
13条
1.all() # 查所有
2.filter() # 根据条件过滤 多个条件之间是and关系
3.get() # 直接获取数据对象 查询条件不存在直接报错
4.first() # 取queryset的第一个数据对象
5.last() # 取queryset的最后一个数据对象
6.exclude() # 除此之外
7.values() # queryset 类似于列表套字典
8.values_list() # queryset 类似于列表套元组
9.count() # 统计数据个数
10.distinct() # 一定要是完全一样的数据才能去重
11.order_by() # 排序 默认是升序 加负号就变成降序
12.reverse() # 反转 排序之后才能反转
13.exists() # 判断queryset是否有值 结果是个布尔值
神奇的双下线的查询
price__gt
price__lt
price__gte
price__lte
price__in=[100,200,300]
price__range=(200,800)
title__contains 包含 模糊匹配
title__icontains 忽略大小写
publish_date__year 只针对年份
publish_date__month 只针对月份
title__startswith
title__endswith
多表查询
前期表准备
图书管理系统
一对多
多对多
一对一
外键字段的增删改查
一对多字段
create(publish_id=1)
create(publish=publish_obj)
update(publish_id=2)
update(publish=publish_obj1)
models.Publish.objects.filter(pk=2).delete()
# orm外键默认是级联更新 级联删除的
多对多字段
# 朝第三张关系表中添加数据
book_obj.authors.add(1)
book_obj.authors.add(1,2,3,4)
book_obj.authors.add(author_obj)
book_obj.authors.add(author_obj,author_obj1,author_obj2)
# 朝第三张表修改数据
book_obj.authors.set((1,))
book_obj.authors.set((1,2,3))
book_obj.authors.set((author_obj,))
book_obj.authors.set((author_obj,author_obj1))
# 朝第三张表删除关系
book_obj.authors.remove(1)
book_obj.authors.remove(1,2,3,4)
book_obj.authors.remove(author_obj)
book_obj.authors.remove(author_obj,author_obj1)
# 朝第三张表清空当前书籍对象所有的记录
book_obj.authors.clear()
跨表查询
正反向的概念:
外键字段在谁那儿 谁就是正向
没有外键字段的 就是反向
口诀:
正向查询按字段
反向查询按表名小写