feat(db): 调整统一管理事务方式
This commit is contained in:
@@ -23,7 +23,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def get(self, filters: dict, model: Model = None) -> Optional[Model]:
|
async def get(self, filters: dict, model: Model = None) -> Optional[Model]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(select(model).filter(
|
result = await self.session.execute(select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model))
|
*self.build_filter_conditions(filters, model))
|
||||||
)
|
)
|
||||||
@@ -34,8 +34,7 @@ class CRUD:
|
|||||||
self, filters: dict, page: int = 1, page_size: int = 10, model: Model = None
|
self, filters: dict, page: int = 1, page_size: int = 10, model: Model = None
|
||||||
) -> Tuple[List[Model], int]:
|
) -> Tuple[List[Model], int]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
filter_conditions = self.build_filter_conditions(filters, model) if filters else []
|
||||||
filter_conditions = self.build_filter_conditions(filters) if filters else []
|
|
||||||
query = select(model).filter(*filter_conditions).order_by(desc(model.created_at))
|
query = select(model).filter(*filter_conditions).order_by(desc(model.created_at))
|
||||||
|
|
||||||
total_query = select(func.count()).select_from(model).filter(*filter_conditions)
|
total_query = select(func.count()).select_from(model).filter(*filter_conditions)
|
||||||
@@ -52,11 +51,10 @@ class CRUD:
|
|||||||
self, group_by_field: str, filters: Dict[str, Any] = None, model: Model = None
|
self, group_by_field: str, filters: Dict[str, Any] = None, model: Model = None
|
||||||
) -> Dict[Any, int]:
|
) -> Dict[Any, int]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
filter_conditions = self.build_filter_conditions(filters) if filters else []
|
filter_conditions = self.build_filter_conditions(filters, model) if filters else []
|
||||||
group_by = getattr(model, group_by_field)
|
group_by = getattr(model, group_by_field)
|
||||||
query = select(group_by, func.count()).filter(*filter_conditions).group_by(group_by)
|
query = select(group_by, func.count()).filter(*filter_conditions).group_by(group_by)
|
||||||
|
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(query)
|
result = await self.session.execute(query)
|
||||||
records = result.all()
|
records = result.all()
|
||||||
|
|
||||||
@@ -64,7 +62,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def create(self, data: dict, filters: dict, model: Model = None) -> Union[Model, bool]:
|
async def create(self, data: dict, filters: dict, model: Model = None) -> Union[Model, bool]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(select(model).filter(
|
result = await self.session.execute(select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model))
|
*self.build_filter_conditions(filters, model))
|
||||||
)
|
)
|
||||||
@@ -78,7 +76,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def get_all(self, filters: dict = None, model: Model = None) -> List[Model]:
|
async def get_all(self, filters: dict = None, model: Model = None) -> List[Model]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(
|
result = await self.session.execute(
|
||||||
select(model) if filters is None else select(model).filter(
|
select(model) if filters is None else select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model)).order_by(desc(model.insert_time))
|
*self.build_filter_conditions(filters, model)).order_by(desc(model.insert_time))
|
||||||
@@ -88,7 +86,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def update(self, data: dict, filters: dict, model: Model = None) -> Optional[Model]:
|
async def update(self, data: dict, filters: dict, model: Model = None) -> Optional[Model]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(select(model).filter(
|
result = await self.session.execute(select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model))
|
*self.build_filter_conditions(filters, model))
|
||||||
)
|
)
|
||||||
@@ -113,7 +111,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def updates(self, data: dict, filters: dict, model: Model = None) -> Optional[Model]:
|
async def updates(self, data: dict, filters: dict, model: Model = None) -> Optional[Model]:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(select(model).filter(
|
result = await self.session.execute(select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model))
|
*self.build_filter_conditions(filters, model))
|
||||||
)
|
)
|
||||||
@@ -138,7 +136,7 @@ class CRUD:
|
|||||||
|
|
||||||
async def delete(self, filters: dict, model: Model = None) -> bool:
|
async def delete(self, filters: dict, model: Model = None) -> bool:
|
||||||
model = model or self.model
|
model = model or self.model
|
||||||
async with self.session.begin():
|
|
||||||
result = await self.session.execute(select(model).filter(
|
result = await self.session.execute(select(model).filter(
|
||||||
*self.build_filter_conditions(filters, model))
|
*self.build_filter_conditions(filters, model))
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ session_maker = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit
|
|||||||
|
|
||||||
async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
|
async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
|
||||||
async with session_maker() as session:
|
async with session_maker() as session:
|
||||||
|
async with session.begin():
|
||||||
yield session
|
yield session
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user