django orm中objects.create()和object.save()之间的区别

django

1个回答

写回答

Fndzzw

2025-07-09 17:18

+ 关注

Django
Django

Django是一个流行的Python Web框架,其内置的ORM(对象关系映射)功能使得与数据库的交互变得更加简单和高效。在Django ORM中,我们经常会用到两个方法来创建和保存数据库记录:objects.create()和object.save()。虽然它们的目的都是用于创建和保存数据,但它们之间有一些细微的区别。

objects.create()方法是Model类的一个管理器(Manager)中的一个便捷方法。它可以在不需要先创建实例的情况下,直接向数据库中插入一条新的记录。该方法接收一系列的关键字参数,这些参数对应于Model类中定义的字段。下面是一个例子:

Python

from Django.contrib.auth.models import User

# 使用objects.create()方法创建一个新的用户

user = User.objects.create(username='john', password='secret')

在上述例子中,我们使用objects.create()方法在User表中创建了一个新的用户记录,同时指定了用户名和密码。这个方法会立即执行数据库的插入操作,并返回一个表示新记录的实例。

相比之下,object.save()方法需要先创建一个Model类的实例,然后对这个实例进行修改并保存到数据库中。这个方法在Model类的实例上调用,用于更新或者插入一条记录。下面是一个例子:

Python

from myapp.models import Article

# 创建一个新的文章实例

article = Article(title='Hello World', content='This is my first article.')

# 修改实例的某些属性

article.title = 'Hello Django'

# 调用save()方法将实例保存到数据库中

article.save()

在上述例子中,我们首先创建了一个Article类的实例,然后对实例的title属性进行了修改,最后调用save()方法将实例保存到数据库中。这个方法会根据实例的状态来判断是执行插入操作还是更新操作。

objects.create()和object.save()的区别

虽然objects.create()和object.save()都可以用于创建和保存数据库记录,但它们之间有一些细微的区别。

首先,objects.create()方法是一个便捷方法,可以直接在Model类的管理器上调用,不需要先创建实例。它会立即执行数据库的插入操作,并返回一个表示新记录的实例。而object.save()方法需要先创建一个实例,并对实例的属性进行修改后才能调用,它会根据实例的状态来判断是执行插入操作还是更新操作。

其次,objects.create()方法只能用于创建新的记录,无法更新已有的记录。而object.save()方法可以用于创建新的记录,也可以用于更新已有的记录。如果调用object.save()方法时实例已经存在于数据库中,那么它会执行更新操作,否则会执行插入操作。

最后,objects.create()方法在创建记录时会自动赋值给实例的主键字段(如果有的话),而object.save()方法不会自动赋值给实例的主键字段。

Django ORM中,objects.create()和object.save()都是用于创建和保存数据库记录的方法。它们的区别在于使用方式、执行时机和能力范围。

使用objects.create()方法可以在不需要先创建实例的情况下,直接向数据库中插入一条新的记录。而使用object.save()方法需要先创建一个实例,并对实例的属性进行修改后才能调用,它可以用于创建新的记录,也可以用于更新已有的记录。

因此,在选择使用哪种方法时,需要根据具体的场景和需求来决定。如果只是简单地创建一条新的记录,可以使用objects.create()方法。如果需要对实例的属性进行修改或者对已有的记录进行更新,就需要使用object.save()方法。

参考代码

下面是一个完整的例子,演示了如何使用objects.create()和object.save()方法来创建和保存数据库记录:

Python

from Django.db import models

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.CharField(max_length=100)

price = models.DecimalField(max_digits=5, decimal_places=2)

# 使用objects.create()方法创建一本新书

book1 = Book.objects.create(title='Harry Potter', author='J.K. Rowling', price='29.99')

# 使用object.save()方法创建一本新书

book2 = Book()

book2.title = 'The Great Gatsby'

book2.author = 'F. Scott Fitzgerald'

book2.price = '19.99'

book2.save()

# 使用object.save()方法更新一本已有的书

book1.price = '24.99'

book1.save()

在上述例子中,我们定义了一个Book模型,包含了书名、作者和价格三个字段。首先,我们使用objects.create()方法创建了一本新书,并指定了书名、作者和价格。然后,我们使用object.save()方法创建了另一本新书,并分别给实例的三个属性赋值后调用save()方法。最后,我们使用object.save()方法更新了第一本书的价格属性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号