一。表记录的增删改查(单表操作)
1.添加
时间的格式必须写成YYYY-MM-DD
2.删除
filter筛选多条记录,返回的是QuerySet集合对象
3.修改
这三种都是类.objects.
4.查询
.values是具体拿一个字段,不再拿整个对象了
以字典的形式返回以列表返回
去重:
是根据某个字段去重,整体是去不了的,因为主键是唯一的
模糊查询:万能的下划线
多表操作(一对多)
1.添加
2查询
通过filter values 双下划线__查询
多对多:两个表之间建立一个ManyToManField
通过对象的方式绑定关系
上面为正向查询。得到book id=3的一个书籍对象,然后在通过这个对象找到所有写id=3的书的所有作者信息。下面为反向查找,通过建立id=2的作者的对象,再通过book_set.all()找到该作者出的所有书
也可以通过万能的双下划线。查询alex出过的书籍名称及价格
添加一个添加第四本书是第二个作者,book_obj是id=4书的对象
添加多个
删除
总结:单表操作
增:create() 查:all ,filter(queryset对象集合).value(字典集合).value_list(元祖集合)
删:.delete() 改:update()
一对多操作:通过外键来操作 增:.create()
查:all().filter()
删:delete() 因为all ,filter(queryset对象集合),所以跨表操作时,for下可以用.而filter选择智能用__
多对多:通过MTM来操作
增:add()
删:remove()
更新:多余删掉。没有自增加
查:m.all()获取的是另一张表所有的queryset对象
拓展:a表是b表的父表。b表又是c表的父表。通过c表来查a表(跨几个表就用几个__
以上都是正向查询,下面介绍反向查询:一般不做反向查询。 一对多和多对多都可以自命名(related_name=''),不自命名的话都是小写的类名_set
第一行s就是“主表”,第二行c就是“主表”