(19)模型层 -ORM之msql 跨表查询(正向和反向查询)

基于对象的跨表查询

基于对象的跨表查询
'''正向和反向查询'''
# 正向 ----> 关联字段在当前表中,从当前表向外查叫正向
# 反向 ---> 关联字段不在当前表中,当当前表向外查叫反向

'''一对一的查询'''
# 查询lqz这个人的地址 正向查询按字段
author = models.Author.objects.filter(name='qlz').first()
print(author.author_detail.addr)   #这样就获取到了地址

# 查询lqz这个人的地址 反向查询按表名小写
author = models.AuthorDetail.objects.filter(addr='武汉').first()
print(author_detail.author.name)

'''一对多的查询 正向查询按字段,反向查询按表名小写_set'''
# 出版社和书是一对多的关系,关联字段在书中
# 正向查询 查询红楼梦这本书的出版社地址
book = models.Book.objects.filter(name='红楼梦').first()
print(book.publish.addr)

# 反向查询
publish = models.Publish.objects.filter(name='南京出版社').first()
books = publish.book_set.all()   #all就是拿出所有的书
# books 是一个queryset对象
for book in books:
print(book.name)   #queryset有多个值要通过for循环取值

'''多对多的查询 书和作者是多对多,关联字段authors在book里'''
#正向查询 按字段.all
# 查询红楼梦这本书的所有作者
book=models.Book.objects.filter(name='红楼梦').first()
authors = book.authors.all()
for author in authors:
print(author.name)

# 反向查询按表名小写_set.all()
# 查询lqz写的所有书
lqz = models.Author.objects.filter(name='lqz').first()
books = lqz.book_set.all()
for book in books:
print(book)

上一篇:Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道


下一篇:Git工作常用