我在这段代码中有两个版本来解释我的问题。 当我执行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)
目前没有回答
相关问题 更多 >
编程相关推荐