码迷,mamicode.com
首页 > 其他好文 > 详细

ORM操作(一)

时间:2017-09-10 01:11:41      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:技术   lis   images   mode   image   dict   start   完成   with   

1,外键

2,多对多

3,一对一  外键加唯一索引

 

 

注意values查询返回的是一个字典的queryset

查看聚合分组的源码  所以注意分组一定要使用values

技术分享

 

 

4,注意查询表与表之间通过外键和多对多关系关联。

 

5,ORM查询和sql查询逻辑相似。不同表之间查询需要通过键实现。

 

from django.db.models import Avg,Min,Sum,Max,Count
from django.db.models import F,Q

def tp5(request):
# #通过orm外键查询书和作者关系
# ret=Book.objects.values(‘title‘,‘authors__name‘)
# print(‘=========>‘,ret)


#单表查询 查询python这边书的价格
# ret=Book.objects.filter(title=‘python‘).values(‘pric‘)


#注意下面是查询是依赖的ForeignKey ForeignKey
# 查询python的这边书的出版社的联系方式
# ret = Book.objects.filter(title=‘python‘).values(‘publisher__address‘)
# print(ret)

#查询python的所有作者名字
# ret=Book.objects.filter(title=‘python‘).values(‘authors__name‘)
# print(ret)


#查询alex出版的所有书的name
ret=Book.objects.filter(authors__name=‘alex‘).values(‘title‘)
print(ret)


#反向查询
ret=author.objects.filter(name=‘alex‘).values(‘book__title‘)
print(‘反向查询‘,ret)


ret=Book.objects.first()
print(ret.title)
print(‘==========‘,ret)
ret=Book.objects.filter(title=‘python‘).values(‘publisher__name‘)
print(ret)

#####aggregate对queryset进行统计
ret=Book.objects.all().aggregate(sum=Sum(‘pric‘))
print(ret)
ret = Book.objects.all().aggregate(count=Count(‘title‘))
print(ret)

#select AVG(pric) from book;
ret=Book.objects.all().aggregate(pric=Avg(‘pric‘),maxpric=Max(‘pric‘))
print(ret)

# ret=Book.objects.filter(title=‘python‘).values(‘authors__name‘)
# print(ret)

####分组查询annotate对分组后的queryset值进行操作
ret=Book.objects.filter(authors__name=‘alex‘).aggregate(Sum(‘pric‘))
print(ret)

ret=author.objects.filter(name=‘alex‘).aggregate(Sum(‘book__pric‘))
print(‘dddddd‘,ret)
print(‘@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@‘)
#每个作者出的书的总价格
ret=Book.objects.values(‘authors__name‘).annotate(pric=Sum(‘pric‘))
print(‘分组‘,ret)
print(‘#######################‘)


##自动通过第三张表完成作者和书的关系查询
ret = Book.objects.values(‘authors__name‘)
print(ret)

#自动通过外键完成了书和出版社的关系查询
ret=Book.objects.values(‘title‘,‘publisher__name‘)
print(‘书和出版社的关系‘,ret)



##注意聚合和分组的查询都是对queryset
ret=Book.objects.values(‘authors__name‘).annotate(Sum(‘pric‘))

print(ret)
return HttpResponse(‘执行成功‘)

 

def tp6(request):

ret=Book.objects.values().aggregate(Avg(‘pric‘),Max(‘pric‘))
print(ret)

ret=author.objects.filter(name=‘alex‘).aggregate(Sum(‘book__pric‘))
print(ret)


ret=Book.objects.filter(authors__name=‘alex‘).aggregate(Sum(‘pric‘))
print(ret)


#OrderedDict通过对字典元素排序
ret=Book.objects.values(‘authors__name‘).annotate(Sum(‘pric‘))
print(ret)



return HttpResponse(‘执行成功‘)


def tp7(request):
‘‘‘
F查询 F就是之前的值
Q查询 Q可以多层嵌套
Q查询 与或非
& | ~
:param request:
:return:
‘‘‘
# Book.objects.update(pric=F(‘pric‘)+20)

ret=Book.objects.filter(
Q(title__startswith=‘p‘)|Q(title__startswith=‘l‘)
).first()
print(ret)

ret = Book.objects.filter(
Q(Q(pric__lt=300)&Q(pric__gt=270))
)
print(‘dddddddddddddd‘,ret)
Book.objects.filter(title=‘python‘).delete()
return HttpResponse(‘执行成功‘)

ORM操作(一)

标签:技术   lis   images   mode   image   dict   start   完成   with   

原文地址:http://www.cnblogs.com/tiantao36/p/7499908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!