ele*_*han 5 python django django-models
如果我从模型中检索到一个对象,例如:
obj = Foo.objects.first()
Run Code Online (Sandbox Code Playgroud)
我知道如果我想稍后引用这个对象并确保它具有数据库中的当前值,我可以调用:
obj.refresh_from_db()
Run Code Online (Sandbox Code Playgroud)
我的问题是,使用这种refresh_from_db()方法比简单地做有什么优势吗?:
obj = Foo.objects.get(id=obj.id)
Run Code Online (Sandbox Code Playgroud)
据我所知,结果是一样的。refresh_from_db()看起来更明确,但在某些情况下,这意味着额外的一行代码。假设我更新了该value字段obj,稍后想测试它是否已更新为False. 相比:
obj = Foo.objects.first()
assert obj.value is True
# value of foo obj is updated somewhere to False and I want to test below
obj.refresh_from_db()
assert obj.value is False
Run Code Online (Sandbox Code Playgroud)
有了这个:
obj = Foo.objects.first()
assert obj.value is True
# value of foo obj is updated somewhere to False and I want to test below
assert Foo.objects.get(id=obj.id).value is False
Run Code Online (Sandbox Code Playgroud)
我对讨论这两者中哪一个更 Pythonic 不感兴趣。相反,我想知道一种方法在资源、性能等方面是否比另一种方法具有实际优势。我已经阅读了这一部分文档,但我无法从中确定使用reload_db(). 谢谢!
Django 源代码通常相对容易理解。如果我们查看refresh_from_db() 实现,它的核心仍然使用相同的 Foo.objects.get(id=obj.id)方法:
db_instance_qs = self.__class__._default_manager.using(db).filter(pk=self.pk)
...
db_instance_qs = db_instance_qs.only(*fields)
...
db_instance = db_instance_qs.get()
Run Code Online (Sandbox Code Playgroud)
只有几个额外的花里胡哨:
因此,对于日常使用,可以肯定地说它们几乎相同,使用您喜欢的任何内容。
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |