模型层

模型层(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查询

posted @ 2022-05-01 18:38  吴神  阅读(49)  评论(0)    收藏  举报