博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django的orm简签
阅读量:6307 次
发布时间:2019-06-22

本文共 2160 字,大约阅读时间需要 7 分钟。

 

ORM

1 添加方法

表.objects.create()

obj=类(title="")
obj.save()
外键字段添加方式(一对多)
Book.objects.create(title="",price="",publish_id=) # publish_id对应的Publish表中的主键id
Book.objects.create(title="",price="",publish=pub_obj) # publish_id对应的Publish表中的主键id
book_obj.publish : 与这本书相关联的出版社对象(一个)
外键字段添加方式(多对多)
authors=models.ManyToManyFields("Author")
book_obj.authors : 与这本书相关的所有的作者集合(querySet)
book_obj.authors.add(obj1,obj2)
book_obj.authors.add(*[])
book_obj.authors.remove(obj)
book_obj.authors.clear()
2 查询方法

表.objects.all() -----------QuerySet [obj,obj]
表.objects.filter(id__gt=3,id__lt=6) -----------QuerySet [obj,obj]
表.objects.get() -----------model对象
QuerSet.first() -----------model对象
QuerSet.last() -----------model对象 eg: 表.objects.all().first()
表.objects.values(字段) --------- 存放字典的集合对象
<QuerySet [{'price': Decimal('45.00'), 'title': 'linux'}, {'price': Decimal('100.00'), 'title': '老男孩历险记'}, {'price': Decimal('12.00'), 'title': '老男孩感情史'}]>
QuerySet:

1 可切片

2 可迭代
3 惰性机制

iterator

exits

连表查询
class Book_authors():
book_id=...
author_id=....
class Author():
name=.....
#books=models.ManyToManyFields("Book")
class Publish():
name=....
class BOOK():
title=...
publish=...
authors=.....
1 基于对象
正向查询:
# 查询某本书的出版社或者作者信息
book_obj=BOOK.objects.get(id=4)
book_obj.publish # 与这本书相关联的出版社
book_obj.authors # 与这本书关联的作者对象集合
反向查询:
# 查询某个出版社出版过的书
# 查询某个作者出版社过的书
author_obj=Author.objects.get(id=2)
author_obj.关联表名__set
author_obj.book__set # 与这个作者关联的所有书籍对象的集合
2 基于 filter values __
表.objects.filter().values()
# 查询python这本书的出版社名字
BOOK.objects.filter(title="python").values(publish__name)
Publish.objects.filter(book__title="python").values("name")
聚合与分组

在sql:

select max() group by 字段 having
select Avg(score) from stu
aggreagte:
Book.objects.all().aggregate(AvgPrice=Avg("price"))
annotate:
# 每一个作者出版过的书中的最高价 : 按作者名字分组
ret4=Book.objects.values("authors__name").annotate(Max("price"))
print(ret4)
F Q
F:
Book.objects.all().update(price=F("price")+20)
Q:
Book.objects.filter(Q(price__gt=200) | Q(id__gt=5) ,title__startswith="老")

3 修改方法

Book.objects.filter(id=5).update(price=1000)

4 删除
Book.objects.filter(id=5).delete() # 级联删除

 

转载于:https://www.cnblogs.com/935415150wang/p/7453126.html

你可能感兴趣的文章
oracle数据泵导入分区表统计信息报错(四)
查看>>
spring技术内幕读书笔记之IoC容器的学习
查看>>
细说多线程(五) —— CLR线程池的I/O线程
查看>>
JavaScript instanceof和typeof的区别
查看>>
Hadoop文件系统详解-----(一)
查看>>
《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(8)--- 主动器...
查看>>
状态码
查看>>
我的友情链接
查看>>
用sqlplus远程连接oracle命令
查看>>
多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】...
查看>>
自动生成四则运算题目
查看>>
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>
在GCE上安装Apache、tomcat等
查看>>