Django模型层(ORM)

 查询API

<1> all():                  查询所有结果
  
<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象

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

正向查询:关联属性所在的表,查询关联表记录

语       法:book.publish

反向向查询

语       法:publish_obj.book_set.all()

                                                                            基于对象的跨表查询

一对一查询【作者与作者明细】

 # 正向查询  查询dhh的住址
   ret=Author.objects.filter(name="dhh").values("authorDetail__addr")
 # 反向查询  查询author_Detail id=1的作者姓名
   author_name=AuthorDetail.objects.filter(nid=1).values("author__name")

一对多查询【出版社与书籍】

# 正向查询  查询“天龙八部”的出版社名称
    book=Book.objects.filter(title="天龙八部").first()
    publish_name=book.publish.name
# 反向查询  查询“上海出版社”出版的所有书籍名称
    publish=Publish.objects.filter(name="上海出版社").first()
    book_lst=publish.book_set.all()
    for book in book_lst:
        print(book.title)

 多对多查询【书籍与作者】

# 正向查询   查询书籍“倚天屠龙记”的作者姓名
    book=Book.objects.filter(title="倚天屠龙记").first()
    authors=book.author.all()
    for author in authors:
        print(author.name)
# 反向查询  查询作者“dhh”出版的所有书籍
    author_obj=Author.objects.filter(name="dhh").first()
    book_list=author_obj.book_set.all()

                                                                            基于双下划线的跨表查询

    # 1 查询“天龙八部”这本书出版社的名字和邮箱
    # 正向查询
    # ret=Book.objects.filter(title="天龙八部").values("publish__name","publish__email")
    # 反向查询
    # ret=Publish.objects.filter(book__title="天龙八部").values("name","email")
    # 2 查询“北京出版社”出版的所有的书籍的名称
    # 正向查询
    # ret=Book.objects.filter(publish__name="北京出版社").values("title")
    #  反向查询
    # ret=Publish.objects.filter(name="北京出版社").values("book__title")
    # 3 查询“天龙八部”这本书籍的作者的年龄
    # ret=Book.objects.filter(title="天龙八部").values("author__age")
    # 反向查询
    # ret=Author.objects.filter(book__title="天龙八部").values("age")
    # 4 查询“dhh”出版过的所有的书籍名称
    # 正向查询
    # ret=Book.objects.filter(author__name="dhh").values("title")
    # 反向查询
    # ret=Author.objects.filter(name="dhh").values("book__title")
    # 5 查询“dhh”的手机号
    # 正向查询
    # ret=Author.objects.filter(name="dhh").values("authorDetail__telephone")
    # 反向查询
    # ret=AuthorDetail.objects.filter(author__name="dhh").values("telephone")
    # 6 查询手机号为 13322222222 的作者的名字
    # 正向查询
    # ret=Author.objects.filter(authorDetail__telephone="13322222222").values("name")
    # 反向查询
    # ret=AuthorDetail.objects.filter(telephone=13322222222).values("author__name")
发布了39 篇原创文章 · 获赞 6 · 访问量 2020

猜你喜欢

转载自blog.csdn.net/weixin_45493345/article/details/100533568
今日推荐