django orm级联_Django ORM的简单总结

本文通过实例详细介绍了Django ORM的使用,包括创建、查询、更新、删除对象,以及各种查询技巧,如过滤、排除、迭代、链式查询、聚合运算等。此外,还探讨了select_related和prefetch_related在减少数据库交互次数上的作用。
摘要由CSDN通过智能技术生成

我们继续昨天的内容使用Oracle中的emp,dept来学习Django ORM,今天做一些总结和扩展,希望你能有所收获。

先来说下两张表emp,dept。

emp表的数据如下:

dept表的数据如下:

然后我们就开始吧,有的同学说我的数据还没有初始化,可以移步上一篇找到脚本。

对于QuerysetAPI的内容,如果看文档有非常多的解释和介绍,很难抓到重点,我就从我的认知来梳理一下。

1. QuerySet 创建对象的方法

>>> fromscott.models importemp

>>> fromscott.models importdept

先得到所有的数据。

>>> emp.objects.all()

[ , , , , , , , , , , , , , ,]

>>> dept.objects.all()

[ , , ,]

第一种方法是使用create

>>> dept.objects.create( dname= 'DEV',loc= 'Beijing')

第二种是初始化另外一个对象,save完成

>>> newdept = dept( dname= 'TEST',loc= 'ShangHai')

>>> newdept.save()

第三种和第二种有些类似,可以对立面的属性根据需求改变。

>>> #method 3

>>> newdept.dname

'TEST'

>>> newdept=dept()

>>> newdept.dname

u''

>>> newdept.dname= 'OPS'

>>> newdept.loc= 'Guangzhou'

>>> newdept.save()

第四种会做一个判断,有点类似数据库立面的create or replace,注意此处的返回是一个布尔值。

>>> dept.objects.get_or_create( dname= 'DBA',loc= 'Shenzhen')

( ,True) 2.查询语句根据主键查询

>>> dept.objects.get( pk= 10)

得到top n的数据

>>> dept.objects.all()[: 5]

[ , , , ,]

使用get方法,返回的是一行

>>> dept.objects.get( dname= 'DBA')

使用filter的exact是精确匹配,和上面的方法是等价的。

>>> dept.objects.filter( dname__exact= 'DBA')

[]

忽略大小写

>>> dept.objects.filter( dname__iexact= 'DBA')

[]

查询内容排除包含ACC的部门

>>> dept.objects.exclude( dname__contains= 'ACC')

[ , , , , , ,]

>>>

可以过滤和排除操作都使用

>>> dept.objects.filter( dname__contains= 'DB').exclude( dname= 'MBA')

[] 3.删除这种方法是查到指定的数据,然后直接删除,还是有一些风险点的。

>>> dept.objects.filter( dname__contains= 'DB').delete()

或者分批删除

>>> dept.objects.all()

[ , , , , , ,]

>>> newdept=dept.objects.filter( dname__contains= 'DEV')

>>> newdept.delete()

全部删除 ,先不操作

dept.objects.all().delete() 4.更新使用filter来过滤得到数据,然后使用update来更新

>>> dept.objects.filter( dname__contains= 'TEST')

[]

>>> dept.objects.filter( dname__contains= 'TEST').update( dname= 'Test')

1L

>>>

>>> dept.objects.filter( dname__contains= 'Te')

[]

或者把初始化一个对象,更新这个对象

>>> newdept=dept.objects.get( dname= 'Test')

>>>

>>> newdept.dname

u'Test'

>>> dname= 'Test2'

>>> loc= 'Lanzhou'

>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值