我在 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
,但我仍然遇到相同的错误...
我将不胜感激任何帮助,谢谢!
如果你查看Beanie文档,你会发现参数“document_model”不正确,正确的参数实际上是“document_models”。我相信,如果你这样尝试,你的代码将会正确运行。