FastAPI 路由器不检测使用 beanie 初始化的集合

问题描述 投票:0回答:1

我在 Python 3.11 中有一个大型应用程序,但我将问题缩小到一个较小的示例来演示,并且我得到了相同的错误。

假设我有一个名为

Product
的课程,它是
Document
:

# /models/product.py
from beanie import Document

class Product(Document):
    ...
    class Settings:
       name = "mycollection"

在我的

main.py
文件中,我初始化
FastAPI
应用程序并给它一个生命周期(为简单起见,省略导入)

# main.py
...

app = FastAPI(lifespan=lifespan)

@app.get('/inside_app')
def inside_app(product: Product):
   return 1

app.include_router(product_router)

if __name__ == '__main__':
   uvicorn.run(app)
# /controllers/product.py

product_router = APIRouter(prefix='/product')

@product_router.get('/inside_product')
def product(product: Product):
    return 1

寿命定义为:

# database_initialization.py

async def initialize_database():
    client = AsyncIOMotorClient(...)
    await init_beanie(database=client.get_database("db_name"), document_model=[Product])


@asynccontextmanager
def lifespan(_app: FastAPI)
    await initialize_database()
    yield

问题是,当我使用邮递员并向

localhost:8000/inside_app
发出 GET 请求时,它工作得很好,没有错误。然而,当我对
localhost:8000/product/inside_product
进行 GET 请求时,我得到:

beanie.exception.CollectionWasNotInitialized

这是为什么呢?我也尝试将寿命添加到

product_router
,但我仍然遇到相同的错误...

我将不胜感激任何帮助,谢谢!

python python-3.x fastapi pymongo beanie
1个回答
0
投票

如果你查看Beanie文档,你会发现参数“document_model”不正确,正确的参数实际上是“document_models”。我相信,如果你这样尝试,你的代码将会正确运行。

© www.soinside.com 2019 - 2024. All rights reserved.