1. 程式人生 > >ORM操作(一)

ORM操作(一)

request resp tp5 turn src title response 技術分享 單表

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操作(一)