【问题标题】:Mongoengine Database cannot change DatabaseMongoengine 数据库无法更改数据库
【发布时间】:2022-08-18 17:01:34
【问题描述】:
在我们公司,我们有一个标准的连接字符串格式来连接 mongodb 数据库,例如:
mongodb://<some_user>:<some_password>@<some_host>.mongodb.net/admin&authSource=admin
当我注册与 mongoengine 的连接时
connect(host=<connection_string>, db=\"my_db\") 要访问的数据库仍然是 admin 和 my_db 未使用。我需要的是用我实际想要使用的数据库覆盖我们的标准连接字符串给出的数据库。
我尝试使用方法switch_db,但由于该方法需要使用预定义连接的数据库别名,这也是不可能的。
我知道,一个解决方案是通过更改初始数据库名称来更改连接字符串。但我需要一个能够在不更改 uri 的情况下动态更改数据库名称的解决方案。
有任何想法吗?
标签:
python
mongodb
mongoengine
【解决方案1】:
我不知道您的应用程序是如何工作的,但前段时间我遇到了类似的问题。
我不知道贵公司使用什么技术,但在我的情况下它是 FastAPI,而且我使用函数作为依赖项,它返回一个默认值。
def get_db():
return 'admin'
@router.get('/')
def connect(db_type=Depends(get_db)):
return mongoengine.connect(host=f'mongodb://<some_user>:<some_password>@<some_host>.mongodb.net/admin&authSource=admin', db=db_type)
如果您喜欢在测试时更改为 my_db 或类似的东西,
你用:
def get_new_db():
returns 'my_db'
app.dependency_overrides[get_db]=get_new_db
并且在您在功能中根据需要使用数据库之后,只需运行(以便您返回到默认值 admin)。
app.dependency_overrides.clear()