Ошибка 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'))

0 ответов

Другие вопросы по тегам