Django - 是模型save()方法懒吗? [英] Django - Are model save() methods lazy?
问题描述
是django中的模型save()方法吗?
Are model save() methods lazy in django?
例如,下面的代码示例中的什么行将django命中数据库?
For instance, at what line in the following code sample will django hit the database?
my_model = MyModel()
my_model.name = 'Jeff Atwood'
my_model.save()
# Some code that is independent of my_model...
model_id = model_instance.id
print (model_id)
推荐答案
有一个延迟保存没有什么意义,是吗? Django的 QuerySets
是懒惰的,模型的 save
方法不是。
It does not make much sense to have a lazy save, does it? Django's QuerySets
are lazy, the model's save
method is not.
从django源:
django / db / models / base.py
,第424-437行:
django/db/models/base.py
, lines 424–437:
def save(self, force_insert=False, force_update=False, using=None):
"""
Saves the current instance. Override this in a subclass if you want to
control the saving process.
The 'force_insert' and 'force_update' parameters can be used to insist
that the "save" must be an SQL insert or update (or equivalent for
non-SQL backends), respectively. Normally, they should not be set.
"""
if force_insert and force_update:
raise ValueError("Cannot force both insert and updating in \
model saving.")
self.save_base(using=using, force_insert=force_insert,
force_update=force_update)
save.alters_data = True
然后, save_base
执行重载(同一文件,行号439-545):
Then, save_base
does the heavy lifting (same file, lines 439–545):
...
transaction.commit_unless_managed(using=using)
...
并且在 django /db/transaction.py
,第167-178行,您会发现:
And in django/db/transaction.py
, lines 167–178, you'll find:
def commit_unless_managed(using=None):
"""
Commits changes if the system is not in managed transaction mode.
"""
...
$ b b
PS所有行号适用于django版本(1,3,0,'alpha',0)
。
这篇关于Django - 是模型save()方法懒吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!