def show(req): #新增记录两种方式,create save # #-------------------create # models.Authors.objects.create(name='jiangqijun') # models.Authors.objects.create(**{'name':'xiaoming'}) # #-------------------save # author1 = models.Authors(name='xiaohua') # author1.save() # author2 = models.Authors() # author2.name='xiaoli' # author2.save() # # #新增记录存在唯一外键 # #方式1,直接写入外键的字段名字并且加上id # #方式2,查询出外键的记录,作为一个对象赋值 # models.AuthorDetail.objects.create(sex='男', email='test01@qq.com', birth_date='2019-03-10', author_id=1) # author_detail = models.AuthorDetail(sex='女', email='test02@qq.com', birth_date='2019-03-11', author_id=2) # author_detail.save() #------------------- # author3 = models.Authors.objects.get(id=3) # models.AuthorDetail.objects.create(sex='男', email='test01@qq.com', birth_date='2019-03-10', author=author3) # #publisher新增记录 # models.Publisher.objects.create(pub_name='才华有限公司1', address='华中地区', city='永州', province='湖南', country='中国',site='www.baidu.com') # models.Publisher.objects.create(pub_name='才华有限公司2', address='华南地区', city='深圳', province='广东', country='中国',site='www.baidu.com') # models.Publisher.objects.create(pub_name='才华有限公司3', address='华中地区', city='长沙', province='湖南', country='中国',site='www.baidu.com') #新增记录存在一对多的外键 # #------------------直接添加publisher_id # models.Book.objects.create(book_name='python', pub_date='2019-09-05', publisher_id='1', price='99') # models.Book.objects.create(book_name='java', pub_date='2019-09-05', publisher_id='1', price='98') # models.Book.objects.create(book_name='c#', pub_date='2019-09-05', publisher_id='2', price='98') # #-------------------添加publiser对象 # publisher_obj = models.Publisher.objects.get(id=3) # models.Book.objects.create(book_name='c#', pub_date='2019-09-05', publisher=publisher_obj, price='98') # #新增记录存在多对多的外键 # #1、如果是通过ManyToManyField创建的,会自动创建第三张表,通过下面的方式进行创建 # #-------------------查询到两个对象的记录,再进行关联 # book_obj1 = models.Book.objects.get(id=1) # authors_obj1 = models.Authors.objects.get(id=1) # authors_obj2 = models.Authors.objects.filter(name='jiangqijun')[1] # book_obj1.author.add(authors_obj1,authors_obj2) #-------------------查询到两个对象的记录,再进行关联 # book_obj2 = models.Book.objects.filter(price=98) # authors_obj3 = models.Authors.objects.filter(name='jiangqijun')[0] # authors_obj3.book_set.add(*book_obj2) # -------------------查询api,总共三种方式 # author_detail_obj=models.AuthorDetail.objects.all()#返回所有的记录 # print(type(author_detail_obj)) # for obj in author_detail_obj: # print(obj.sex) # print(author_detail_obj[0]) # print(models.AuthorDetail.objects.filter(sex='男')) #返回多个结果 # print(models.AuthorDetail.objects.get(sex='女')) #返回结果只能又一个,超过的话就会报错,这里返回得时一个对象 # print(models.AuthorDetail.objects.all().values('email')) #print(AuthorDetail.objects.all().values_list('email','id')) #切片,可迭代 # book_obj = models.Book.objects.all() # print(book_obj) # for obj in book_obj: # print('############') # print(obj.book_name) # print(book_obj[0]) #惰性机制 #obj = models.Book.objects.filter(id__gt=1)#如果下面没有使用obj那么这句话不会执行select查询操作 # print(obj) # if obj.exists(): # print('ok') #执行查询后存在缓存机制,这里就是在第一次执行了查询后,再第二次再次执行得时候还是不会去查数据库 # obj1 = models.Book.objects.filter(id=3) # for i in obj1: # print(i) # models.Book.objects.filter(id=3).update(book_name='数学') # obj2 = models.Book.objects.filter(id=3) # for j in obj2: # print('222222{0}'.format(j)) # # for k in obj1: # print('1111111{0}'.format(k)) # l = ['1','2','3'] # #it = l.__iter__() # it = iter(l) # print(type(it)) # print(tuple(it)) # print(next(it)) # print(next(it)) # print(next(it)) # print(type(it)) #print(tuple(it)) # #正向查询 # book1 = models.Book.objects.first() # print(book1.book_name) # print(book1.price) # print(book1.publisher.pub_name) # # #反向查询 # publisher1 = models.Publisher.objects.last() # print(publisher1.book_set.all()[0]) #这里的正向是指在book中添加了其他的字段,反向是指被添加在哪里 #正向的时候book__book_name第一个book是表名,publiser__city是book中绑定的字段的名称 #连表正向查询之一对多 书名为python的出版社的城市 # print(models.Book.objects.filter(book_name='c++').values('publisher__city')[0])#取出queryset集合的数据就是字典 # print(models.Book.objects.filter(publisher__city='永州').values('book_name')) # #正向查询之多对多 # print(models.Book.objects.filter(book_name='c++').values('author__name')) # print(models.Book.objects.filter(author__name='jiangqijun').values('book_name')) # #连表反向查询之多对一 # print(models.Publisher.objects.filter(id=1).values('book__book_name')) # print(models.Publisher.objects.filter(book__book_name='c++').values('pub_name')) # #连表正向查询之多对多 # print(models.Authors.objects.filter(name='jiangqijun').values('book__book_name')) # print(models.Authors.objects.filter(book__book_name='c++').values('name')) #模型的双下划线 # print(models.Book.objects.filter(id__lt=4, id__gt=1)) # print(models.Book.objects.filter(id__in=[1,3])) #包含 # print(models.Book.objects.exclude(id=1)) #不包含 # print(models.Book.objects.filter(book_name__contains='p')) # print(models.Book.objects.filter(book_name__icontains='P')) #聚合函数 from django.db.models import Avg, Min, Sum, Max # print(models.Book.objects.all().aggregate(Avg('price'))) # print(models.Book.objects.aggregate(average_price=Avg('price'))) # print(models.Book.objects.aggregate(Max('price'), Min('price'), Sum('price'))) #分组函数 #print(models.Book.objects.values('publisher__pub_name').annotate(Min('price'))) from django.db.models import F from django.db.models import Q #修改book中price字段的数值+1 # models.Book.objects.update(price=F('price')+0.1) # print(models.Book.objects.all().values('price')) #用来进行与和或查询 # print(models.Book.objects.filter(Q(id=1)|Q(id=2))) # print(models.Book.objects.filter(Q(book_name__startswith='p')|Q(book_name__startswith='c'))) #print(models.Book.objects.filter(Q(id=2), book_name='c++')) #获取条数 #print(models.Book.objects.all().count()) #print(models.Book.objects.all().order_by('-id')) # print(models.Book.objects.all().values('publisher_id').distinct()) # print(models.Book.objects.all().values_list('publisher_id').distinct()) #修改 #models.Book.objects.filter(id=3).update(book_name='php') #删除 #models.Book.objects.filter(id=1).delete() # book1 = models.Book.objects.filter(id=5) # book1.publiser.clear() #---删除普通删除 #models.AuthorDetail.objects.filter(id=4).delete()
return render(req, "show.html")