ORM映射(对象关系映射) 分创建表和操作表两个部分 创建单表 创建关联表(foreignKey) 一对一 一对多(重点) 多对多(重点) 创建表后加str方法把打印的地址转换成对应字符 表的操作(增删改查): 1.增(create,save) from app01.modals import * create方式一:Author.objects.create(name="eric") create方式二:Author.objects.create(*{"name":"eric"}) save方式一:author = Author(name="eric") author.save() save方式二:author=Author() author.name="eric" author.save() 2.删(delete) Book.object.filter(id=1).delete() (3,{'app01.Book_authors':2,'app01.Book':1}) 3.改(update,save) update直接改:Publisher.objects.filter(id=2).update(name='eric') save相当于重新赋值:author=Author.object.get(id=5) author.name='eric' author.save() 4.查(filte,value等) 查询API:54-02 filter:(**kwargs) :它包含了与所给筛选条件相匹配的对象 all():查询所有结果 get(**kwargs):返回与所给筛选条件匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会 抛出错误。 对查询结果进行处理: values(**kwargs):返回一个ValueQuerySet 一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而 是一个可迭代的字典序列 exclude(**kwargs):它包含了与所给筛选条件不匹配的对象 order_by(*field):对查询结果排序 reverse():对查询结果反向排序 distinct():从返回结果中剔除重复记录 values_list(*field):它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 count():返回数据库中匹配查询(QuerySet)的对象数量。 fist():返回第一条记录 last():返回最后一条记录 exists():如果QuerySet包含数据就返回True,否则就返回False 惰性机制: 1.可迭代 2.可切片 5.重点:如何创建存在一对多或多对多关系一本书的信息呢?(如何处理外键关系的字段如一对多的publisher和 多对多的authors) 一对一(OneToOne): 一对多(foreignKey): 插入(1)models.Book.object.create(title="Python",publish_id=2) (2)推荐使用: models.Book.object.create(title="Python",publish=obj) 由于绑定一对多的字段,比如publlish_id 多对多(通过外键和方法自动创建第三张表):model.manytomanyfield() 自动创建第三张表: add()绑定关系 remove()解除关系 ----正向查询(例子是从2开始建立的正向查询) book=models.Book.objects.filter(id=2)[0] #获取id=2时的参数值 authors=models.Author.objects.filter(id__gt=2) #大于2 book.author.add(*authors) book.author.remove(*authors) #移除关系 ----反向查询 (例子是从3开始到2建立的反向查询) author=models.Author.objects.filter(id=3)[0] books=models.Book.objects.filter(id__gt=2) author.book_set.add(*books) author.book_set.remove(*books) #移除关系 非自动创建第三张表(手动): 手动建表可以直接插入数据 联合唯一:unique_together=['字段','字段'] 控制台执行数据库操作: python manage.py makemigrations python manage.py migrate 注:第三张表的删除会出现级联删除情况,update()方法要用集合对象才能调用 manytomany():通过两个foreignKey 缓存时用iterator()方法把对象封装成可迭代对象
ORM映射(对象关系映射)
最新推荐文章于 2022-04-28 21:55:00 发布