django ORM查询
- 基础知识
forginkey在数据多的那张表,及多对一- 正向查询,从forginkey所在表去查关联表
- 反向查询,从关联表去查询forginkey所在的表
eg:
书籍表和出版社表,一个书籍对应一个出版社,一个出版社对应多个书籍,此时forginkey位于书籍表中,从书籍表查询出版社表为正常查询,从出版社表查询书籍表为反向查询
- 环境
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 |
- 一对多查询
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')