# -*- coding:utf-8 -*- from typing import List, Optional from sqlalchemy import delete, func, select, update from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload from {{ package_name }}.model.{{ table_name }}_model import {{ table_name|snake_to_pascal_case }}Model from {{ package_name }}.schema import {{ table_name|snake_to_pascal_case }}CreateSchema, {{ table_name|snake_to_pascal_case }}UpdateSchema from app.core.base_crud import CRUDBase from app.api.v1.module_system.auth.schema import AuthSchema class {{ table_name|snake_to_pascal_case }}Dao(CRUDBase[{{ table_name|snake_to_pascal_case }}Model, {{ table_name|snake_to_pascal_case }}CreateSchema, {{ table_name|snake_to_pascal_case }}UpdateSchema]): """ {{ function_name }}模块数据库操作层 """ def __init__(self, auth: AuthSchema) -> None: """初始化CRUD""" super().__init__(model={{ table_name|snake_to_pascal_case }}Model, auth=auth) async def get_{{ table_name }}_by_id(self, db: AsyncSession, {{ table_name }}_id: int): """ 根据{{ table_name }}id获取{{ function_name }}信息 :param db: orm对象 :param {{ table_name }}_id: {{ table_name }}id :return: {{ function_name }}信息对象 """ {{ table_name }}_info = ( ( await db.execute( select({{ table_name|snake_to_pascal_case }}Model) .where({{ table_name|snake_to_pascal_case }}Model.id == {{ table_name }}_id) ) ) .scalars() .first() ) return {{ table_name }}_info async def get_{{ table_name }}_list(self, db: AsyncSession, search: {{ table_name|snake_to_pascal_case }}QueryParam = None, order_by: Optional[str] = None): """ 根据查询参数获取{{ function_name }}列表信息 :param db: orm对象 :param search: 查询参数对象 :param order_by: 排序字段 :return: {{ function_name }}列表信息对象 """ query = select({{ table_name|snake_to_pascal_case }}Model) # 添加查询条件 if search and hasattr(search, '__dict__'): for attr, value in search.__dict__.items(): if value is not None and hasattr({{ table_name|snake_to_pascal_case }}Model, attr): if isinstance(value, tuple) and len(value) == 2: operator, val = value if operator == "like": query = query.where(getattr({{ table_name|snake_to_pascal_case }}Model, attr).like(f"%{val}%")) elif operator == "between": query = query.where(getattr({{ table_name|snake_to_pascal_case }}Model, attr).between(val[0], val[1])) else: query = query.where(getattr({{ table_name|snake_to_pascal_case }}Model, attr) == val) else: query = query.where(getattr({{ table_name|snake_to_pascal_case }}Model, attr) == value) # 添加排序 if order_by: # 这里应该解析order_by参数并应用排序 query = query.order_by({{ table_name|snake_to_pascal_case }}Model.created_at.desc()) else: query = query.order_by({{ table_name|snake_to_pascal_case }}Model.id.desc()) # 执行查询 result = await db.execute(query) all_data = list(result.scalars().all()) return all_data async def delete(self, db: AsyncSession, ids: List[int]) -> int: """ 删除{{ function_name }}信息 :param db: orm对象 :param ids: {{ function_name }}id列表 :return: 删除的记录数 """ result = await db.execute( delete({{ table_name|snake_to_pascal_case }}Model).where({{ table_name|snake_to_pascal_case }}Model.id.in_(ids)) ) return result.rowcount