我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine从db读取设置文档,mongoengine是pymongo的高级包装器。 我每次访问它的属性时都能重新加载文件(假设MongoDB中的Setting集合中有一个文档):
import time
import mongoengine
class Setting(mongoengine.Document):
log_level = mongoengine.StringField(default='info')
setting = Setting.objects[0]
while True:
time.sleep(1)
setting.reload()
print(setting.log_level)
但是,我对每次访问log_level属性时自动重新加载Setting文档的方法感兴趣。在mongoengine有一个干净的方法吗?我更喜欢这样的代码,我的设置总是与db同步:
...
while True:
time.sleep(1)
print(setting.log_level)
我已经阅读了mongoengine doc以找到一个很好的方法,我发现no_cache()方法可以用来强制Setting类返回一个非缓存的查询集。有了这个,我就更接近了:
def get_setting():
return Setting.objects.no_cache()[0]
while True:
time.sleep(1)
print(get_setting().log_level)
有什么想法吗?
谢谢
答案 0 :(得分:0)
您可以编写一个自定义方法来执行此操作。 伪代码:
def get_reloaded_attr(obj,attr):
obj.reload()
return getattr(obj,attr)