Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?_Python_Mongodb_Pymongo_Mongoengine - Fatal编程技术网

Python 在访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?

Python 在访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?,python,mongodb,pymongo,mongoengine,Python,Mongodb,Pymongo,Mongoengine,我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine(pymongo的高级包装器)从db中读取了设置文档。 每次访问文档的属性时,我都可以像这样重新加载文档(假设MongoDB中的Setting collection中有一个文档): 但是,我感兴趣的是一种方法,可以使设置文档在每次访问日志级别属性时自动重新加载。在mongoengine中有没有一种干净的方法可以做到这一点?我更喜欢这样的代码,并且我的设置始终与db同步: ... while True:

我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine(pymongo的高级包装器)从db中读取了设置文档。 每次访问文档的属性时,我都可以像这样重新加载文档(假设MongoDB中的Setting collection中有一个文档):

但是,我感兴趣的是一种方法,可以使设置文档在每次访问日志级别属性时自动重新加载。在mongoengine中有没有一种干净的方法可以做到这一点?我更喜欢这样的代码,并且我的设置始终与db同步:

...
while True:
    time.sleep(1)
    print(setting.log_level)
为了找到一个好的方法,我读了更多的mongoengine文档,但没有发现可以用来强制设置类返回非缓存查询集的\u cache()方法。有了这个,我更接近了:

def get_setting():
    return Setting.objects.no_cache()[0] 

while True:
    time.sleep(1)
    print(get_setting().log_level)
有什么想法吗


谢谢

您可以编写一个自定义方法来实现这一点。 伪代码:

def get_reloaded_attr(obj,attr):
    obj.reload()
    return getattr(obj,attr)

谢谢你的建议。但我正试图找到一种更简洁的方法,因为我必须在代码中的任何地方使用此设置文档,并且调用诸如get_reloated_attr(设置“log_level”)之类的函数都是冗长和间接的。
def get_reloaded_attr(obj,attr):
    obj.reload()
    return getattr(obj,attr)