Django中的create()方法创建一个模型实例,然后调用save(),据说触发提交。因此触发事务的提交应该没有任何区别。
但实际上,在Postgresql上使用create()执行一个创建一堆模型实例的方法我得到transaction aborted, commands ignored until end of transaction
异常。该方法适用于非事务性数据库后端。另外,当我用:
m = Model(attr1=..., attr2=...)
m.save()
它也可以在Postgresql上运行。
在交易意义上使用save()
和create()
之间有区别吗?
编辑: create()在调用save()之前也设置self._for_write = True
,但我无法跟踪它以查看它是否对事务行为有任何影响。
编辑:可以找到示例代码here。
答案 0 :(得分:13)
正如您所见,create()
is just a wrapper for save()
:
_for_write
part最有可能仅用于数据库选择,因此我不会过多关注它。
关于“交易中止”错误,如果没有看到您的代码,很难说出问题是什么。也许你是违反了使用create()的UNIQUE约束,导致PostgreSQL要求事务回滚,然后你尝试了save()
不同的数据 - 没有确切的代码就很难判断。