Ошибка Fastapi python mongodb не может выполнять операции с базой данных
Я пытаюсь получить доступ к соединению mongodb в main.py из database.py. Но я получаю None типа. Пожалуйста, предложите любые методы для этого. Ниже мой код. Я запутался в получении объекта db из database.py.
Просмотрел все документы в интернете. Но до сих пор нет решения. Ниже мой код database.py
**database.py**
import urllib
from motor.motor_asyncio import AsyncIOMotorClient
db = None
async def connect_db():
"""Create database connection."""
try:
# MongoDB attributes
user = 'admin'
pwd = urllib.parse.quote_plus('*****')
mongodb_uri = 'mongodb+srv://'+user+':'+pwd+'@test.***.mongodb.net/test_db?retryWrites=true&w=majority'
# connect to mongodb
db = AsyncIOMotorClient(mongodb_uri)
print('connected')
except Exception as e:
print(str(e))
async def close_db():
"""Close database connection."""
print('closing')
db.close()
print('db closed')
Ниже приведен основной код py.
**main.py**
import uvicorn, logging, asyncio
from fastapi import Depends, FastAPI, HTTPException
from typing import List
from fastapi.middleware.cors import CORSMiddleware
from motor.motor_asyncio import AsyncIOMotorClient
from database import connect_db,close_db
app = FastAPI(title="test", version="1")
app.add_event_handler("startup", connect_db)
# print(db.list_database_names())
app.add_event_handler("shutdown", close_db)
#CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
allow_credentials=True,
)
@app.get("/db_list")
async def show_db():
resp = db.list_collection_names()
print(resp)
return {"result":resp}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8081,log_level=logging.DEBUG,
log_config=logging.basicConfig(filename='backend/logs/backend_server.log',
filemode='a+',
level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s'))