Django新增数据

2021-10-13 11:40:46 浏览数 (1)

Django新增数据

方式一

增加是比较简单的操作,Django的ORM可以使用如下的方式新增一条数据。

代码语言:javascript复制
from book.models import BookInfo
book = BookInfo(name="Django教程",readcount=0,commentcount=0)       # 创建BookInfo对象
book.save()                         # 使用save方法保存到数据库

Django做的比较优雅的事情是:Django的一个model类对应数据库中一张表,而该类的对象则对应于数据表中的一条数据,这样的抽象是比较合理的。

注意:

代码语言:javascript复制
使用save()方法保存新对象的时候,不要指定主键的值。因为在你调用 save() 之前,没有办法表中的 id 的值应该是多少,因为这个值是由你的数据库计算出来的,而不是由 Django 计算出来的。

save()方法也被用来更新数据,如前所述,如果你在保存新对象的时候指定了主键的值,如果这个值在数据库中已经存在,那么插入操作,就变成了更新操作。

方式二

除了上面的方式之外,还可以使用Model.objects的方法来实现新增一条数据。

Django每个非抽象的 Model 类必须有一个 Manager 实例添加到其中。Django 确保在你的模型类中至少指定了一个默认的 Manager。如果你没有添加自己的 Manager,Django 会添加一个属性 objects,包含默认的 Manager 实例。如果添加自己的 Manager 实例属性,则不会出现默认的。

Manager 是一种接口,它赋予了 Django 模型操作数据库的能力。Django 应用中每个模型拥有至少一个 Manager,就是默认的objects.

以上这些描述来自Django官方文档。之后再写一篇文章详细解释这些东西,现在只需要知道默认的Manager是objects,它能赋予Django模型操作数据库的能力。

objects管理器提供了create()方法,可以一步到位直接将数据保存至数据库。例如:

代码语言:javascript复制
from book.models import BookInfo
BookInfo.objects.create(name="Python教程",readcount=0,commentcount=0)

注意:

如果你的新增操作包含了一个你手动设置的主键值,而且如果这个值已经存在于数据库中,那么对 create() 的调用就会以一个 IntegrityError 失败,因为主键必须是唯一的。如果必须使用手动主键,那么要做好处理异常处理。和save()一样,通常情况下,不要去指定主键的值。

0 人点赞