mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 21:06:32 +00:00
重构代码生成模块的模板文件,统一命名规范为下划线风格 优化GenTableQueryParam查询参数类,移除不必要的字段 修复SQLite数据库支持问题,改进表结构查询逻辑 添加数据验证处理,防止空值导致的异常 改进批量生成代码时的错误处理和参数校验
93 lines
4.0 KiB
Django/Jinja
93 lines
4.0 KiB
Django/Jinja
# -*- 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 |