我继承了一个完善的基于烧瓶的 API 服务,该服务广泛使用了 mongoengine。我们正在将这个单数据库 API 变成一个多租户服务,并不清楚最佳实践。由于许多原因,租户数据将被物理隔离到不同的数据库中,每个租户一个 db。(对于某些文档,还有一个到“核心”数据库的连接。)
用例工作流程很简单:
- 收到请求
- 验证 API 访问令牌并协调用户/租户
- 将数据库连接切换到正确的租户数据库
- 做文档操作
似乎实现这一点的最佳方法是使用别名,但是当我进行上下文切换时,我需要disconnect('tenant_db')
使用connect(alias='tenant_db')
. 这感觉不对。
无论如何,代码确实有效,但现在我遇到了单元测试问题。在测试并使用(每个文档)mongomock://localhost
连接时,代码实际上会超时尝试连接到在 localhost 上运行的真实 mongodb。我怀疑这一切都与没有适当范围的模拟连接有关,但我找不到太多关于使用模拟数据库进行测试的文档。
抱歉,两个问题合二为一:
- 那么
disconnect
重connect
别名模式是正确的方法吗 - pytest+mongoengine+mongomock有没有更好的实践(或更清晰的例子)
不是 pytest 的专业人士,但也不是新手。坚固pymongo
但全新mongoengine
。
谢谢!