29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from sqlalchemy import select, insert
|
||
|
||
from app.database import async_session_maker
|
||
|
||
|
||
class BaseDAO:
|
||
model = None
|
||
|
||
@classmethod
|
||
async def add(cls, **data): # Метод добавляет данные в БД
|
||
async with async_session_maker() as session:
|
||
query = insert(cls.model).values(**data).returning(cls.model.id)
|
||
result = await session.execute(query)
|
||
await session.commit()
|
||
return result.scalar()
|
||
|
||
@classmethod
|
||
async def find_one_or_none(cls, **filter_by): # Метод проверяет наличие строки с заданными параметрами
|
||
async with async_session_maker() as session:
|
||
query = select(cls.model).filter_by(**filter_by)
|
||
result = await session.execute(query)
|
||
return result.scalar_one_or_none()
|
||
|
||
@classmethod
|
||
async def find_all(cls, **filter_by): # Метод возвращает все строки таблицы или те, которые соответствуют отбору
|
||
async with async_session_maker() as session:
|
||
query = select(cls.model.__table__.columns).filter_by(**filter_by)
|
||
result = await session.execute(query)
|
||
return result.mappings().all()
|