文档只是说
要将对象保存回数据库,请调用save()
不清楚。实验发现,如果包含Logger log = LoggerFactory.getLogger(getClass());
,它将更新现有条目,而如果不包含,则会创建新行。该文档是否指定会发生什么情况?
答案 0 :(得分:2)
这里有很多记录:
https://docs.djangoproject.com/en/2.2/ref/models/instances/#how-django-knows-to-update-vs-insert
您可能已经注意到Django数据库对象使用相同的save() 创建和更改对象的方法。 Django提取了 使用INSERT或UPDATE SQL语句。具体来说,当您致电 save(),Django遵循以下算法:
如果对象的主键属性设置为可评估的值 改为True(即,无或空字符串以外的值),Django 执行一个UPDATE。如果未设置对象的主键属性 或UPDATE没有更新任何内容(例如,如果主键设置为 一个数据库中不存在的值),Django执行 插入。这里的一个陷阱是,您应注意不要 如果保存新对象,则明确指定主键值 无法保证主键值未使用。有关此的更多信息 细微差别,请参阅上面明确指定自动主键值和 在下面强制执行INSERT或UPDATE。
请注意:django是OSS,因此有疑问时,您始终可以阅读源代码;-)
答案 1 :(得分:-1)
取决于Model
对象的创建方式。如果是从数据库中查询的,则为UPDATE
。如果它是一个新对象并且之前没有保存过,请INSERT
。