Рекомендации по подключению MongoDB с помощью Motor в FastAPIPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Рекомендации по подключению MongoDB с помощью Motor в FastAPI

Сообщение Anonymous »

У меня вопрос: каковы наилучшие методы подключения к базе данных в FastAPI?
Чтобы обеспечить некоторый контекст, я хочу написать код для подключения к базе данных MongoDB с помощью Motor . Моя идея состоит в том, чтобы создать одиночное соединение и использовать его во всех контроллерах, которым оно необходимо, посредством внедрения зависимостей, но я не совсем понимаю, как это сделать. Итак, позвольте мне показать вам простой пример кода, чтобы в двух словах проиллюстрировать эту идею:
database.py:

Код: Выделить всё

from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase
from dotenv import dotenv_values

class Database:
_client: AsyncIOMotorClient | None = None
_db: AsyncIOMotorDatabase | None = None

@staticmethod
def connect() -> None:
config = dotenv_values(".env")
Database._client = AsyncIOMotorClient(config["ATLAS_URI"])
Database._db = Database._client[config["DB_NAME"]]

@staticmethod
def close() -> None:
if Database._client is not None:
Database._client.close()
else:
raise ConnectionError("Client not connected")

@staticmethod
def get_db() -> AsyncIOMotorDatabase:
if Database._db is not None:
return Database._db
else:
raise ConnectionError("Database not connected")

main.py:

Код: Выделить всё

from fastapi import FastAPI, Depends
import uvicorn
from database import Database
from contextlib import asynccontextmanager
from motor.motor_asyncio import AsyncIOMotorDatabase

@asynccontextmanager
async def lifespan(app: FastAPI):
Database.connect()
yield
Database.close()

app = FastAPI(lifespan=lifespan)

@app.get("/")
async def main(db: AsyncIOMotorDatabase = Depends(Database.get_db)):
await db["books"].insert_one({"hello": "world"})
return "Done"

if __name__ == "__main__":
uvicorn.run("main:app", reload=True)

Как видите, у меня есть класс Database, предназначенный для управления подключением к базе данных. В main.py в функции lifespan мы запускаем подключение к базе данных MongoDB до того, как приложение начнет работать, и закрываем его, когда приложение останавливается. Наконец, в качестве примера, у нас есть небольшая конечная точка, которая получает экземпляр базы данных с помощью внедрения зависимостей и создает простой документ в коллекции под названием «книги».
Идея состоит в том, чтобы в будущем разделить код на модели, контроллеры и сервисы, чтобы создать лучший код. Однако текущий вопрос не об этом, поэтому я решил не приводить пример кода.
Мне хотелось бы знать, что вы думаете о моем решении. Есть ли способы улучшить его? Следую ли я лучшим практикам? Можете ли вы выявить какие-либо потенциальные проблемы? Любые предложения приветствуются. Если у вас есть другой подход, поделитесь им.
Большое спасибо за чтение :D

Подробнее здесь: https://stackoverflow.com/questions/785 ... in-fastapi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • FastAPI - маршруты pymongo + sync, по-видимому, НАМНОГО быстрее, чем маршруты Motor + async
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Не может получить доступ к подключению просмотра
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Подключение к подключению MANEMANERAGER при подключении VPN
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Где я могу найти данные Rocket Motor (количество зерен, радиус сопла и т. д.), используемые в RocketPy?
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • FOOTECHMOTORSBUS Motor проверка не удалась на порт
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»