python - 使用 fastAPI 从 MongoDb 获取数据时出错
问题描述
此功能是从 mongoDB 数据库中获取所有待办事项,但是当我尝试时显示错误。当从 mongo shell 尝试 find() 函数时,一切都很好,但是从这里它显示协程对象不可迭代的错误并显示类型错误。任何帮助都是可观的!
数据库连接
client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017')
database = client.TodoList
Collection = database.todo
Python 函数
async def fetch_all_todos():
todos = []
cursor = Collection.find({})
async for document in cursor:
todos.append(ToDo(**document))
return todos
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 369, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 59, in __call__
return await self.app(scope, receive, send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\fastapi\applications.py", line 199, in __call__
await super().__call__(scope, receive, send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\applications.py", line 112, in __call__
await self.middleware_stack(scope, receive, send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\middleware\errors.py", line 181, in __call__
raise exc from None
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\middleware\errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\exceptions.py", line 82, in __call__
raise exc from None
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\routing.py", line 580, in __call__
await route.handle(scope, receive, send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\routing.py", line 241, in handle
await self.app(scope, receive, send)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\starlette\routing.py", line 52, in app
response = await func(request)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\fastapi\routing.py", line 224, in app
response_data = await serialize_response(
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\fastapi\routing.py", line 138, in serialize_response
return jsonable_encoder(response_content)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\fastapi\encoders.py", line 141, in jsonable_encoder
raise ValueError(errors)
ValueError: [TypeError("'coroutine' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')]
解决方案
您需要等待 mongo 呼叫
async def fetch_all_todos():
todos = []
cursor = await Collection.find({})
async for document in cursor:
todos.append(ToDo(**document))
return todos
推荐阅读
- python - Python:带有计数器的for循环和计划增加的增加
- android - 在 Shape Drawable 中调整高度
- c# - 每次迁移中始终包含播种记录
- python - Chrome Devtools 网络 Selenium python
- froala - Froala 附加 Outlook 电子邮件文件导致“出现问题”
- c++ - 如何在模板函数中实现模板类类型?
- vue.js - Vue 路由器警告消息“与参数一起传递,但它们将被忽略”
- solr - 如何从 Apache Solr 下载/导出数据到 CSV 文件?我在 Solr 中创建了集合,我想将数据从 Solr 导出到 CSV
- node.js - 云构建以 FAILURE 状态完成;其他问题如下
- c# - 如何使用 LINQ to SQL 在计算列上获得不同的值?