https://art049.github.io/odmantic/

    1. from odmantic import AIOEngine
    2. from motor.motor_asyncio import AsyncIOMotorClient
    3. from logzero import logger
    4. app = FastAPI(
    5. title="SO测试工具API",
    6. description="SO测试工具API",
    7. version="0.0.1"
    8. )
    9. @app.on_event("startup")
    10. async def startup_event():
    11. try:
    12. # 链接mongodb
    13. mongodb_str = "mongodb://%s:%s@" % (MONGODB_USER, MONGODB_PASSWORD)
    14. if isinstance(MONGODB_URL_LIST, list):
    15. for mongodb_url in MONGODB_URL_LIST:
    16. mongodb_str += mongodb_url + ":" + str(MONGODB_PORT) + ","
    17. mongodb_str = mongodb_str[:-1]
    18. else:
    19. mongodb_str = "mongodb://" + MONGODB_URL_LIST + ":" + str(MONGODB_PORT)
    20. # client = AsyncIOMotorClient("mongodb://localhost:27017/")
    21. client = AsyncIOMotorClient(mongodb_str)
    22. app.state.mongo = AIOEngine(motor_client=client, database="test")
    23. logger.info(f"mongo connect success-->>{app.state.mongo}")
    24. except BaseException as e:
    25. logger.error(f"链接失败:{str(e)}")
    26. app.include_router(recommend_mongo_operation.router)
    27. if __name__ == "__main__":
    28. uvicorn.run(
    29. app="main:app",
    30. host="0.0.0.0",
    31. port=8082,
    32. reload=True,
    33. debug=True,
    34. log_level="debug",
    35. access_log=True,
    36. use_colors=True,
    37. log_config="so_fastapi/uvicorn_config.json"
    38. )
    39. ------------------------------------------------
    40. from odmantic import Model
    41. from fastapi import Request, APIRouter
    42. from logzero import logger
    43. router = APIRouter()
    44. class TestModel(Model):
    45. name: str
    46. age: int
    47. @router.post("/save_mongo_data", tags=["mongodb"], summary="插入新数据")
    48. async def save_mongo_data(req: Request, data: TestModel):
    49. res = await req.app.state.mongo.save(data)
    50. logger.info(f"res: {res}")
    51. return res
    52. @router.get("/get_mongo_data", tags=["mongodb"], summary="查询数据")
    53. async def get_mongo_data(req: Request):
    54. res = await req.app.state.mongo.find_one(TestModel, {"age": 7888})
    55. logger.info(f"res: {res}")
    56. return res