模型层
模型层(ORM操作)
单表操作
DateField里面的参数
auto_now_add:创建数据记录的时候会把当前时间添加到数据库。
auto_now:每次更新数据记录的时候会更新该字段。
************强调:只要是queryset对象就可以无限制的点queryset的方法**************
queryset对象可以作为判断的条件,为空的时候对应的布尔值也是False
models.Book.objects.filter().filter().filter().filter().filter().filter()
<1> all(): 查询所有结果

<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象

<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象

<5> order_by(*field): 对查询结果排序('-id')/('price')
<6> reverse(): 对查询结果反向排序 >>>前面要先有排序才能反向
<7> count(): 返回数据库中匹配查询(QuerySet)的对象数量。

<8> first(): 返回第一条记录
<9> last(): 返回最后一条记录
<10> exists(): 对查询出来的QuerySet进行有误数据的判断,有就返回True,否则返回False
<11> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

<12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

<13> distinct(): 从返回结果中剔除重复纪录
返回QuerySet对象的方法有:
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
返回具体对象的
get()
first()
last()
多表操作
如何判断表关系:一方能否有多个另一方,另一方能否有多个一方
一对一:其实就是一张表被我认为拆分成了两张表而已,主要是为了缓解查询压力
一对多:通常建立在多的那一方
多对多:多对多字段建立在哪张表里都可以,但是通常建立在查询频率比较高的那张表里,为了后期的正向查询提供方便
多对多字段数据的增删改查
add()
remove()
set()
# 前面三个可以支持传多个参数 并且参数既可以是对象,也可以是数据的id,不要混着用!!!
clear()
# 直接清空,不需要传参数
正向查询按字段,反向查询按表名小写
正向与反向
一对一
正向:author---关联字段在author表里--->authordetail 按字段
反向:authordetail---关联字段在author表里--->author 按表名小写
查询wushen作者的手机号 正向查询

查询地址是:山东 的作者名字 反向查询

一对多
正向:book---关联字段在book表里--->publish 按字段
反向:publish---关联字段在book表里--->book 按表名小写
_set.all()因为一个出版社对应着多个图书
# 多对多
# 正向:book---关联字段在book表里--->author 按字段
# 反向:author---关联字段在book表里--->book 按表名小写
_set.all()因为一个作者对应着多个图书
查询书籍是火影忍者的作者 正向查询

查询北方出版社的书籍 反向查询

跨表查询
正向查询按字段,反向查询按表名小写!!!
聚合查询
分组查询
F与Q查询
F查询
Q查询

浙公网安备 33010602011771号