内容简介:模型关系:1.查询python这本书籍的出版社的邮箱3.查询golang作者的年龄
模型关系:
from django.db import models # Create your models here. class Author(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() # 与AuthorDetail建立一对一的关系 authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True) birthday = models.DateField() telephone = models.BigIntegerField() addr = models.CharField(max_length=64) class Publish(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) # 与Publish建立一对多的关系,外键字段建立在多的一方 publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE) # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors = models.ManyToManyField(to='Author', )
1.查询 python 这本书籍的出版社的邮箱
# 正向查询按字段 v = models.Book.objects.filter(title="python教程").first() print(v.publish.email) # beijing@163.com
- 反向查询按 表名小写_set.all()
# 海南出版社出版的书籍名称 # filter 和 get 区别, filter 查出来是集合,所以经常跟first(), get 查出来是对象。 v = models.Publish.objects.filter(name='海南出版社').first() # v = models.Publish.objects.get(name='海南出版社') for book in v.book_set.all(): print(book.title) # golang教程 #nodejs 教程
3.查询golang作者的年龄
# 按字段(authors.all()) # 多对多 book -----------------------> author # <---------------- # book_set.all() ath = models.Book.objects.filter(title="golang教程").first() for auther in ath.authors.all(): print(auther.name, auther.age) # 小明 10 # 莉君 12
4.查询莉君出版过的书籍名称
ath = models.Author.objects.filter(name='莉君').first() for book in ath.book_set.all(): print(book.title) # golang教程 # nodejs 教程
- 查询莉君的手机号
ath = models.Author.objects.filter(name='莉君').first() print(ath.authorDetail.telephone) # 18938641414
- 查询家在深圳的作者名字
dais = models.AuthorDetail.objects.filter(addr='深圳市') for ath in dais: print(ath.author.name) # 莉君
- 北京出版社出版的书籍名称
ret1 = models.Publish.objects.filter(name="成都出版社").values('book__title') print(ret1.query) ''' SELECT `app01_book`.`title` FROM `app01_publish` LEFT OUTER JOIN `app01_book` ON (`app01_publish`.`nid` = `app01_book`.`publish_id`) WHERE `app01_publish`.`name` = 成都出版社 ''' # 方式2: ret2 = models.Book.objects.filter(publish__name="成都出版社").values("title") print(ret2.query) """ SELECT `app01_book`.`title` FROM `app01_book` INNER JOIN `app01_publish` ON (`app01_book`.`publish_id` = `app01_publish`.`nid`) WHERE `app01_publish`.`name` = 成都出版社 """
7.查询手机号以188开头的作者出版过的书籍名称以及书籍对应的出版社名称
# ret3 = models.Book.objects.filter(authors__authorDetail__telephone__startswith="188").values('title', 'publish__name') # # print(ret3.query) """ SELECT `app01_book`.`title`, `app01_publish`.`name` FROM `app01_book` INNER JOIN `app01_book_authors` ON (`app01_book`.`nid` = `app01_book_authors`.`book_id`) INNER JOIN `app01_author` ON (`app01_book_authors`.`author_id` = `app01_author`.`nid`) INNER JOIN `app01_authordetail` ON (`app01_author`.`authorDetail_id` = `app01_authordetail`.`nid`) INNER JOIN `app01_publish` ON (`app01_book`.`publish_id` = `app01_publish`.`nid`) WHERE `app01_authordetail`.`telephone` LIKE BINARY 188% """
以上所述就是小编给大家介绍的《django ORM 查询关系》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 支付宝工程师如何搞定关系数据库的“大脑”——查询优化器
- 框架与RTTI的关系,RTTI与反射之间的关系
- 如何用循环关系网络机智地解决数独类关系推理任务?
- 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射
- Hibernate 关系映射整理
- Hibernate 关系映射整理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
离散数学及其应用(原书第7版)
Kenneth H. Rosen / 徐六通、杨娟、吴斌 / 机械工业出版社 / 2015-1-1 / 129
《计算机科学丛书:离散数学及其应用(原书第7版)》是介绍离散数学理论和方法的经典教材,已经成为采用率最高的离散数学教材,被美国众多名校用作教材,获得了极大的成功。中文版也已被国内大学广泛采用为教材。作者参考使用教师和学生的反馈,并结合自身对教育的洞察,对第7版做了大量的改进,使其成为更有效的教学工具。《计算机科学丛书:离散数学及其应用(原书第7版)》可作为1至2个学期的离散数学课入门教材,适用于数......一起来看看 《离散数学及其应用(原书第7版)》 这本书的介绍吧!