python-orm
2021-05-17 06:28
标签:objects Nid rom 手机号 开头 手机 print start set #########################基于对象查询(子查询)############################ book_set.all() 按字段(authors.all()) 反向查询alex出版过的书籍名称: 按字段 authorDetail 反向查询 家在山东的作者名字: 查询python这本书籍的出版社的邮箱: 查询苹果出版社出版的书籍名称: python-orm 标签:objects Nid rom 手机号 开头 手机 print start set 原文地址:https://www.cnblogs.com/fangsheng/p/9747323.html
按字段(publish)
1) 一对多 : book -----------------------------------> publish
正向查询按字段:查询python这本书籍的出版社的邮箱
python=models.Book.objects.filter(title="python").first()
print(python.publish.email)
‘‘‘
对应sql:
select publish_id from Book where title="python"
select email from Publish where nid = 1
‘‘’
反向查询按 表名小写_set.all() : 苹果出版社出版的书籍名称
publish_obj=models.Publish.objects.filter(name="苹果出版社").first()
for obj in publish_obj.book_set.all():
print(obj.title)
2) 多对多: book -------------------------------------> author
book_set.all()
正向查询python作者的年龄:
python = models.Book.objects.filter(title="python").first()
for author in python.authors.all():
print(author.name ,author.age)
alex=models.Author.objects.filter(name="alex").first()
for book in alex.book_set.all():
print(book.title)
3) 一对一 author ----------------------------------------> authordetail
按表名 author(不要_set)
正向查询 alex的手机号:
alex=models.Author.objects.filter(name=‘alex‘).first()
print(alex.authorDetail.telephone)
author_obj =models.AuthorDetail.objects.filter(addr="shandong").first() # shandong只有一个
print(author_obj.author.name)
ad_list=models.AuthorDetail.objects.filter(addr="shandong") # shandong有多个
for ad in ad_list:
print(ad.author.name)
###################基于queryset和__查询(join查询)#####################
正向查询: 按字段(关联字段)__xxx
ret=models.Book.objects.filter(title="python").values("publish__email")
print(ret.query)
反向查询: 按表名小写__xxx
ret=models.Publish.objects.filter(book__name="python").values("email")
print(ret)
‘‘‘SQL:
select publish.email from Book
left join Publish on book.publish_id=publish.nid
where book.title="python"
‘‘‘
正向查询:字段__xxxx
ret2=models.Book.objects.filter(publish__name="苹果出版社").values("title")
print("2222222222====>", ret2.query)
反向查询:表名小写__xxx
ret1=models.Publish.objects.filter(name="苹果出版社").values("book__title")
print("111111111====>",ret1.query)
查询alex的手机号
正向查询:字段__xxxx
ret=models.Author.objects.filter(name="alex").values("authorDetail__telephone")
反向查询:表名小写__xxx
models.AuthorDetail.objects.filter(author__name="alex").values("telephone")
查询手机号以151开头的作者出版过的书籍名称以及书籍对应的出版社名称
ret=models.Book.objects.filter(authors__authorDetail__telephone__startswith="151").values(‘title‘,"p ublish__name")
print(ret.query)
上一篇:线程同步