django ORM查询

  1. 基础知识
    forginkey在数据多的那张表,及多对一
    • 正向查询,从forginkey所在表去查关联表
    • 反向查询,从关联表去查询forginkey所在的表
      eg:
      书籍表和出版社表,一个书籍对应一个出版社,一个出版社对应多个书籍,此时forginkey位于书籍表中,从书籍表查询出版社表为正常查询,从出版社表查询书籍表为反向查询

  1. 环境
    eg:

book表

id title price publish
1 西游记 200.00 1
2 三国演义 300.00 2
3 水浒传 200.00 1
4 红楼梦 240.00 2

publish表

id publish_name publish_email
1 人民出版社 renmin@qq.com
2 北京出版社 beijign@163.com

  1. 一对多查询
    book表和publish表
    关联属性(forginkey) 在Book表中

Book---->Publish 正向查询 book_obj.publish 按字段

Publish---->Book 反向查询 publish_obj.book_set.all() 按表名小写_set

  • 基于对象查询(子查询)
    3.1.1 正向查询,查询西游记的出版社名字
book_obj = Book.object.filter(title='西游记').first()
print(book_obj.publish_name)
print(bool_obj.publish_email)

3.1.2 反向查询,查询人民出版社的出版过的书

publish_obj = Publish.objects.filter(publish='人民出版社').first()
ret = publish_obj.book_set.all()
  • 对于双下划线查询(join查询)
    3.2.1 正向查询,查询西游记的出版社名字
    Book.object.filter('title'='西游记').values('publish__name')

3.2.2 反向查询,查询人民出版社的出版过的书
Publish.object.filter('book__title='西游记').values('name')

posted @ 2020-05-27 17:58  daniell  阅读(88)  评论(0编辑  收藏  举报