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")

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值