调试Fastapi+mongdb时出错

2024-06-16 09:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这段代码中有两个版本来解释我的问题。 当我执行uvicorn main:app--reload时,两个版本都能完美工作。我的问题在调试时出现

当我使用版本1并注释版本2时,我可以毫无问题地进行调试,但当我使用版本2并注释版本1时,我会出现以下错误:

created\u user=wait users\u collection.insert\u one(form\u dict)

运行时错误:任务<;任务挂起名称='Task-7'coro=<;RequestResponseCycle.run_asgi()运行于C:\Users\C\PycharmProjects\fastapi_test\u fallo\u loop\lib\site packages\uvicorn\protocols\http\h11\u impl.py:394>;cb=[set.discard()]>;获得未来<;未来挂起的cb=[\u chain\u Future..\u call\u check\u cancel(),位于C:\Users\C\AppData\Local\Programs\Python\Python38-32\lib\asyncio\futures.py:360]>;附加到不同的循环

为什么会出现此错误

我应该一直使用版本1吗

from motor.motor_asyncio import AsyncIOMotorClient

# version 1
'''
class DataBase:
   client: AsyncIOMotorClient = None
   usersDB = None

db = DataBase()

async def connect_to_mongo():
   db.client = AsyncIOMotorClient("mongodb://mongo:mongo@19*****:27017/admin?retryWrites=false")
   db.usersDB = db.client.app

async def close_mongo_connection():
   db.client.close()

# end version 1
'''
# version 2
DB_CLIENT = AsyncIOMotorClient("mongodb://mongo:mongo@19*****:27017/admin?retryWrites=false")
db = DB_CLIENT['app']
# end version 2

这里我有一个main.py,它提供了一个注册用户并解释问题的方法

from fastapi import FastAPI, Form, HTTPException
# from app.mongodb import connect_to_mongo, close_mongo_connection  # version 1
from app.mongodb import db  # version 2, version 1
from fastapi.responses import JSONResponse

app = FastAPI()


# app.add_event_handler("startup", connect_to_mongo)  # version 1
# app.add_event_handler("shutdown", close_mongo_connection)  # version 1


@app.post("/register")
async def register(username: str = Form(..., max_length=50)):
   form_dict = {'username': username}
   # users_collection = db.usersDB.get_collection('users')  # version 1
   users_collection = db.get_collection('users')  # version 2
   created_user = await users_collection.insert_one(form_dict)
   if created_user:
      return JSONResponse(status_code=200,
                        content='user is created correctly')
   else:
      raise HTTPException(status_code=400,
                        detail='user is not created correctly')


   if __name__ == "__main__":
     import uvicorn
     uvicorn.run(app, host="127.0.0.1", port=8000)

Tags: fromimport版本clientappdbversionmongo