django自带的orm增删改

# 转载请留言联系

  • 模型管理器

模型管理器:objects属性

  1. 每个模型类默认都有一个叫 objects 的类属性,它由django自动生成
  2. 我们把 objects 称为 模型管理器,其类型为: django.db.models.manager.Manager
  3. 通过objects属性,可以实现对数据库相关的操作,常用方法如下
objects管理器中的方法返回类型作用
模型类.objects.create()模型类对象创建一个对象(新增一条数据)
模型类.objects.get()模型对象查询一个对象,且只能有一个:
如果查到多条数据,则报:MultipleObjectsReturned
如果查询不到数据,则报:DoesNotExist
模型类.objects.all()QuerySet查询所有的对象
模型类.objects.count()数字查询总共有多少条数据
模型类.objects.filter()QuerySet查询满足条件的对象
模型类.objects.exclude()QuerySet查询不满条件的对象
模型类.objects.order_by()QuerySet对查询结果集进行排序
模型类.objects.aggregate()字典,例如:
{'salary__avg': 9500.0}
进行聚合操作
Sum, Count, Max, Min, Avg
模型类.objects.exists()True或者FalseTrue表示有查询集中有数据,否则没有

注意:get()在sqlchemy中只能填主键,django的可以填任意的,只需要保证查出来的是一条数据即可。不然会报错。

拓展

QuerySet支持切片操作:

1.query_set[0]:取出查询集的第一条数据,不存在会抛IndexError异常。

2.query_set[0:2]也可以,但是注意下标不支持负数!

 

例如有两张表,员工与部门,他们是一对多关系。现在对他们的数据进行操作。

1.模型对象.save()

# 新增员工
e = Employee()
e.name = "chichung"
e.age = 23
# 特别注意这句!!!
e.department = Department.objects.get(id=1)
e.save()

  当插入关联属性时,先查出要关联的对象,然后再赋值。如果直接写e.department = 1的话,根据员关联查询会出现问题的。

2.模型类.objects.create(属性1=值1,属性2=值2,...)

Employee.objects.create(name = "chichung",age = 23,department = Department.objects.get(id=1))

 

1.模型类对象.delete()

e = Employee.objects.get(id=1)
e.delete()

2.模型类.filter(条件).delete()

Employee.objects.filter(id=1).delete()

拓展:

这两种方式删除有什么区别呢?

第一种,会先查询,这时候调用了一条SQL语句。然后删除,又调用了一条SQL语句。所以效率比较低。

第二种,直接执行一条SQL语句进行删除,所以效率比较高。

第一种的使用场景是,开头有用到,已经查询了,然后直接调用删除,那么实际删除也只是用了一条。

 

1.模型类对象.save()

e = Employee.objects.get(id=1)
e.name = "mouren"
e.save()
# 注意,当id已存在时,才是修改操作,不然是新增操作

2.模型类.filter(条件).update(属性1=值1,属性2=值2,...)

Employee.objects.filter(id=1).update(name="某人")

转载于:https://www.cnblogs.com/chichung/p/9917706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值