from sqlalchemy import MetaData, Table, inspect, text, Column, Integer, String, DateTime, Date from flask import current_app from lib.error import Error from model.ide.ide_table import IdeTable from model.ide.ide_attr import IdeAttr from model.ide.ide_section import IdeSection from core.environment.application import Application class BuilderTable(Application): def create(self, module: str, table: str, name: str, parent: int = None, back_data: bool = True) -> int | dict: """ @ SqlAlchemy:生成:数据表 :param module: 模块名称 :param table: 表名称 :param name: 表显示名称 :param parent: 父表 :param back_data: 是否返回数据 """ if inspect(self.engine).has_table(table): raise Error(f"{table}:{Error.TABLE_ALREADY_EXISTS}") fields_default = "这里是 yaml 配置" if parent is None: fields_default = [field for field in fields_default if field["name"] != "fid"] fields_format = [self.generate_column(field) for field in fields_default] Table(table, MetaData(), *fields_format).create(self.engine) return _table @classmethod def generate_column(cls, params: dict): """ @ SqlAlchemy:生成:字段对象 :param params: 字段参数 """ format_data = params if params.get("type_") is not None: format_data["type_"] = cls.generate_type(params["type_"]) if params.get("server_default") is not None: format_data["server_default"] = text(str(params["server_default"])) return Column(**format_data) @classmethod def generate_type(cls, typer: str, length: int = 50): """ @ SqlAlchemy:生成:类型对象 :param typer: 类型 :param length: 长度 """ if typer == "int": return Integer elif typer == "str": return String(length) elif typer == "date": return Date elif typer == "datetime": return DateTime else: return String(length) 配置是 `yaml` field: # 默认字段:新建模块场景 default: - name: id type_: int comment: 系统编号 primary_key: true - name: sid type_: varchar comment: 业务编号 index: true primary_key: false - name: fid type_: int comment: 父表编号 index: true primary_key: false - name: create_user type_: int comment: 创建人 index: true primary_key: false - name: create_group type_: int comment: 创建组 index: true primary_key: false - name: update_user type_: int comment: 修改人 index: true primary_key: false - name: update_group type_: int comment: 修改组 index: true primary_key: false - name: create_time type_: datetime comment: 创建时间 primary_key: false - name: update_time type_: datetime comment: 更新时间 primary_key: false - name: status type_: int comment: 系统状态 index: true primary_key: false server_default: 1 然后代外层循环创建表的时候居然除了第一张表是对的后面全是 `varchar` 了,人都傻了,这怎么回事 