运行两个命令之间的区别是什么:
foo = FooModel()
Run Code Online (Sandbox Code Playgroud)
和
bar = BarModel.objects.create()
Run Code Online (Sandbox Code Playgroud)
第二个是否立即BarModel在数据库中创建一个,而for FooModel,save()必须显式调用该方法以将其添加到数据库中?
Django中的create()方法创建一个模型实例,然后调用save(),据说触发提交.因此触发事务的提交应该没有任何区别.
但实际上,在Postgresql上使用create()创建一组模型实例的方法我得到了transaction aborted, commands ignored until end of transaction异常.该方法适用于非事务性数据库后端.另外,当我用以下内容替换create()时:
m = Model(attr1=..., attr2=...)
m.save()
Run Code Online (Sandbox Code Playgroud)
它也可以在Postgresql上运行.
使用save()和create()交易意义上有区别吗?
edit: create()也在self._for_write = True调用save()之前设置,但我无法跟踪它以查看它是否对事务行为有任何影响.
编辑:示例代码可以在这里找到.
Author.objects.create(name="Joe")
Run Code Online (Sandbox Code Playgroud)
要么
an_author = Author(name="Joe")
an_author.save()
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?哪一个更好?
类似的问题:
- django orm中的objects.create()和object.save()之间的区别
- Django:从事务角度看save()和create()之间的区别