import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day84.settings")
import django
django.setup()
# 手动创建第三张表的第一种方式(比较麻烦)
from app01 import models
# 给xxx这本书新增lqz和egon两个作者(增)
# models.Book2Author.objects.create(book_id=1,author_id=1)
# models.Book2Author.objects.create(book_id=1,author_id=2)
# 删 把两个作者都删除
# ret=models.Book2Author.objects.filter(book_id=1).delete()
# 查询xxx这本书所有的作者
# book=models.Book.objects.get(pk=1)
# # book.auhtors
# ret=models.Book2Author.objects.filter(book_id=book.pk)
# for i in ret:
# print(i.author.name)
# 基于双下划线查询
# ret = models.Book.objects.filter(name='红楼梦').values('authors__name')
# print(ret)
# 既能用orm的关联查询,又能手动创建第三张表
# add,clear,remove,set:都用不了了
# 增,删,改:用表模型操作
# 用表模型
# 查询xxx这本书所有的作者
# book1 = models.Book1.objects.get(pk=1)
# authors=book1.authors.all()
# for author in authors:
# print(author.name)
# 基于双下划线的查询
# ret=models.Book1.objects.filter(name='红楼梦').values('authors__name')
# print(ret)
# ret=models.Book2Author1.objects.create(book_id=1,author_id=2)
# 以后用:
# -如果第三张表中没有其它字段,直接让它自动创建
# -如果第三张表中有其它字段,手动创建第三张表,并且,用ManyToManyField做关联
# -用了ManyToManyField做了关联的作用是什么?(跟自动创建第三张表的所有的查询是一样的)
# add, clear, remove, set: 都用不了了
# 给红楼梦这本书添加egon作者
# book=models.Book1.objects.get(pk=1)
# egon=models.Author1.objects.get(pk=2)
# book.authors.add(egon)
# defer和only(高级阶段,提高查询效率)
# ret=models.Book1.objects.all().values('id','name')
# ret=models.Book1.objects.all().only('name')
# ret=models.Book1.objects.all()
# # 比如有10条数据---11句sql
# for book in ret:
# # print(book.id)
# print(book.name)
# # 也有(不能这么写)
# print(book.price)
ret = models.Book1.objects.all().defer('id','name','publish_id')
for book in ret:
print(book.price)
# print(book.publish)
# print(book.name)
# 总结
# only和defer 返回结果是queryset对象内包裹表模型的对象
# only,就是只查我指定的字段,一定会包含id 注意:没查的字段不要再用了
# defer,指定不取哪个字段,一定会包含id 注意:没查的字段不要再用了