Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Mongodb Flask—重新加载在第一个请求之前加载的数据库_Mongodb_Python 3.x_Flask - Fatal编程技术网

Mongodb Flask—重新加载在第一个请求之前加载的数据库

Mongodb Flask—重新加载在第一个请求之前加载的数据库,mongodb,python-3.x,flask,Mongodb,Python 3.x,Flask,我在连接到MongoDB的flask上运行了一个API,它使用这个DB进行只读。 我在第一次请求之前连接到db: @app.before_first_request def load_dicti(): c = MongoClient('mongodb://' + app.config['MONGO_DSN'], connect=False) db = c.my_name app.first, app.second = dictionary_compilation(db.m

我在连接到MongoDB的flask上运行了一个API,它使用这个DB进行只读。 我在第一次请求之前连接到db:

@app.before_first_request
def load_dicti():
    c = MongoClient('mongodb://' + app.config['MONGO_DSN'], connect=False)
    db = c.my_name
    app.first, app.second = dictionary_compilation(db.my_base, another_dictionary)
但是,此mongodb可能会不时更新。我的API不知道这一点,因为这个数据库在第一个请求之前就已经加载了


最有效的应对方法是什么?非常感谢您的解释和代码示例。

我不太清楚您将要做什么,但这可能是最佳实践。就像在Flask docs中一样,您可以执行以下操作:

def get_db():
    """Opens a new database connection if there is none yet for the
    current application context.
    """
    if not hasattr(g, 'db'):
        c = MongoClient('mongodb://' + app.config['MONGO_DSN'], connect=False)
        g.db = c.my_name
    return g.db
然后,您可以在视图函数中直接使用get_db,只有在g中没有db attr时,才会连接mongdb一次


如果您的连接不稳定,需要每次更改,则可以连接每个请求或每个。

在第一次请求之前,我将数据库上载到api内存中。如果我当时理解了你的建议:如果在此会话中未上载数据库,则加载该数据库;在这种情况下,它是在第一次请求之前发生的吗?上传是什么意思?您是否将在第一次请求之前初始化app.config['MONGO_DSN']?在大多数情况下,MongoClient实例是可重用且线程安全的,因此它是通过在app contextI中创建来共享的。我的意思是,数据库在db=c.my\u name之后存储在api内存中。在我的情况下,在首次请求decorator之前,我需要再次读取它,因此我必须更改如何在db=c.my\u name之后将其放入g中,比如附加行g.db=db?然后你可以在其他请求中通过g.db获得它,这是你想要的吗?我实际上需要两件事:1数据库不能在每次请求时上传到api;2有时我可能仍然需要手动重新加载它;也许通过另一种api方法,我如何使用g.db来实现它?