Django - ORM常用操作


objects:为models默认管理器, 在插入的时候可以使用id也可以使用对象, 这里返回的是一个object

详情: https://docs.djangoproject.com/zh-hans/3.0/topics/db/queries/

插入多对多关系的时候需要分布操作

一、 增加crate 和 save方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 利用create创建
Author.object.cerate(name="李四")

# 利用save方法创建
xiaoming = Author(name="小明")
xiaoming.save()

# 在创建主键关系的时候,比如OneToOneField, ManyTOManyField, ForeignKey, 在author绑定的时候使用author_id绑定
xiaoming_detail = AuthorDetail(sex="0", email="xiaoming@email.com", address="北京xxxx", brithday="1900-8-8", author_id="3")
xiaoming_detail.save()

# 增加一条出版社信息
pub = Publisher()
pub.name = "成都工业"
pub.address = "成都xxx"
pub.city = "成都"
pub.state_province = "四川"
pub.country = "中国"
pub.website = "www.google.com"
pub.save()

# 增加书籍信息,多对多是两张表,author和数据对应的是一张表
book = Book(title="这是一本书", publisher=pub, publication_date="2017-8-9")
# 所以这需要先保存
book.save()
book.author.add(xiaoming)
li = Author.objects.get(id=2)
book.author.add(li)

然后就会在表格中多一个。

二、 修改update 和 save方法

注意update修改于QuerySet, get获取的是object对象,filter 获取的是QuerySet

1
2
3
4
5
6
7
8
# 利用 save方法修改
li = Author.objects.get(id=2)
li.name = "最强王者"
li.save()

# 利用 update方法修改, QuerySet
b = Publisher.objects.filter(id=1)
b.update(website="http://www.baidu.com")

三、 查询(惰性查询)和删除

  1. QuerySet 是惰性的 —— 创建 QuerySet 并不会引发任何数据库活动。你可以将一整天的过滤器都堆积在一起,Django 只会在 QuerySet 被 计算 时执行查询操作。在使用xxx.objects.all()的时候,并没有直接去数据库查询,但是,如果使用就会进行数据库的实际查询。

  2. delete删除, QuerySet和object都行

1
2
3
# 删除是级联删除,on_delete=models.CASCADE, 删除了张三,那么authorDetail里面的张三也会被删除
Author.objects.filter(id=1).delete()
Author.objects.get(id=2).delete()

查询方法有: https://docs.djangoproject.com/zh-hans/3.0/topics/db/queries/

QuerySet不支负数索引

  • get()
  • filter()
  • first()
  • last()
  • all()
  • count()