gpt4 book ai didi

Django:从事务角度看 save() 和 create() 的区别

转载 作者:行者123 更新时间:2023-12-03 23:46:55 24 4
gpt4 key购买 nike

Django 中的 create() 方法会创建一个模型实例,然后调用 save(),据说会触发提交。所以触发事务的提交应该没有任何区别。

但实际上,在 Postgresql 上执行使用 create() 创建一堆模型实例的方法我得到 transaction aborted, commands ignored until end of transaction异常(exception)。该方法在非事务性数据库后端运行良好。另外,当我将 create() 替换为:

m = Model(attr1=..., attr2=...)
m.save()

它也可以在 Postgresql 上正常运行。

使用 save() 有区别吗?和 create()在交易的意义上?

编辑: create() 还设置 self._for_write = True在调用 save() 之前,但我无法跟踪它以查看它是否对事务行为有任何影响。

编辑:示例代码可以在 here 中找到.

最佳答案

您可能已经看到, create() is just a wrapper for save() :

_for_write part很可能仅用于数据库选择,所以我不会过多关注它。

关于“事务中止”错误,如果没有看到您的代码,很难说出问题是什么。也许你例如使用 create() 违反了 UNIQUE 约束,导致 PostgreSQL 要求事务回滚,然后您尝试了 save()使用不同的数据 - 如果没有确切的代码,很难分辨。

关于Django:从事务角度看 save() 和 create() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com