jac*_*uel 42 python django orm
u = UserDetails.objects.create(first_name='jake',last_name='sullivan')
u.save()
Run Code Online (Sandbox Code Playgroud)
UserDetails.objects.create()并且u.save()都执行相同的save()功能.有什么不同?使用create()vs 有任何额外的检查或好处save()吗?
类似的问题:
- 在Django中创建模型对象的最佳方法是什么?
- Django:从事务角度看save()和create()之间的区别
Max*_*ant 63
Django文档说它是一样的.这仅仅是更方便,使其在同一行.你也可以save()在一行上创建,但它会更冗长,更不易读 - 很明显你用这个create()方法创建了一个新对象.
create(**kwargs)创建对象并将其全部保存在一个步骤中的便捷方法.从而:
Run Code Online (Sandbox Code Playgroud)p = Person.objects.create(first_name="Bruce", last_name="Springsteen")和:
Run Code Online (Sandbox Code Playgroud)p = Person(first_name="Bruce", last_name="Springsteen") p.save(force_insert=True)是等价的.
该
force_insert参数在别处记录,但它的全部意思是始终会创建一个新对象.通常你不需要担心这个.但是,如果您的模型包含您设置的手动主键值,并且该值已存在于数据库中,则调用create()将失败,IntegrityError因为主键必须是唯一的.如果您使用手动主键,请准备好处理异常.
小智 7
类似问题: Django Model() vs Model.objects.create()
Model()vs之间的区别Model.objects.create()总结如下。
.save()在内部作为INSERT或UPDATE对象.objects.create()执行到 db,而仅对db执行INSERT对象。
Model.save() 执行....
更新?如果对象的主键属性设置为评估为True
插入?如果对象的主键属性未设置或 UPDATE 未更新任何内容(例如,如果主键设置为数据库中不存在的值)。
如果主键属性设置为一个值,则Model.save()执行UPDATE但Model.objects.createraise IntegrityError。
例如。
模型.py
class Subject(models.Model):
subject_id = models.PositiveIntegerField(primary_key=True, db_column='subject_id')
name = models.CharField(max_length=255)
max_marks = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)
1)插入/更新到数据库 Model.save()
physics = Subject(subject_id=1, name='Physics', max_marks=100)
physics.save()
math = Subject(subject_id=1, name='Math', max_marks=50) # Case of update
math.save()
Run Code Online (Sandbox Code Playgroud)
输出:
Subject.objects.all().values()
<QuerySet [{'subject_id': 1, 'name': 'Math', 'max_marks': 50}]>
Run Code Online (Sandbox Code Playgroud)
2)插入数据库 Model.objects.create()
Subject.objects.create(subject_id=1, name='Chemistry', max_marks=100)
IntegrityError: UNIQUE constraint failed: m****t.subject_id
Run Code Online (Sandbox Code Playgroud)
说明:以上math.save()是更新的情况,因为它subject_id是主键并且subject_id=1存在 django 内部执行UPDATE,为此将 Physics 命名为 Math 和 max_marks 从 100 到 50,但是objects.create() raise IntegrityError
Model.objects.create()不等同于,Model.save()但是可以通过方法 ie上的force_insert=True参数实现相同的效果。saveModel.save(force_insert=True)Model.save()返回NonewhereModel.objects.create()返回模型实例即package_name.models.Model结论:在 Model.objects.create()内部进行模型初始化并save使用force_insert=True.
Model.objects.create() 的源代码块
def create(self, **kwargs):
"""
Create a new object with the given kwargs, saving it to the database
and returning the created object.
"""
obj = self.model(**kwargs)
self._for_write = True
obj.save(force_insert=True, using=self.db)
return obj
Run Code Online (Sandbox Code Playgroud)
可以通过以下链接了解更多详细信息:
注意:以上答案来自问题。
| 归档时间: |
|
| 查看次数: |
38931 次 |
| 最近记录: |