Mongodb Flask—重新加载在第一个请求之前加载的数据库
我在连接到MongoDB的flask上运行了一个API,它使用这个DB进行只读。 我在第一次请求之前连接到db: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
@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来实现它?