from sqlalchemy import Column, String, Enum, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.dialects.mysql import LONGTEXT from BM02_指标仓库.Schemas.IndexStoreSchemas import NatureEnum from BM02_指标仓库.DataBase import Base class Indicator(Base): __tablename__ = "indicator" iid = Column(String(32), primary_key=True) ename = Column(String(255), index=True) cname = Column(String(255), index=True) description = Column(LONGTEXT) nature = Column(Enum(NatureEnum, values_callable=lambda obj: [e.value for e in obj])) category_id = Column(String(12), ForeignKey("indicator_category.id")) category = relationship("IndicatorCategory", backref="indicator") parameters = relationship("Parameters", backref="indicator", cascade="all, delete-orphan") def to_dict(self): _dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} _dict.update({"category": self.category.__str__()}) _dict.update({"parameters": [param.to_dict() for param in list(self.parameters)]}) return _dict class Parameters(Base): __tablename__ = "parameters" pid = Column(String(32), primary_key=True) ename = Column(String(255)) cname = Column(String(255)) description = Column(LONGTEXT) path = Column(String(255)) _iid = Column(String(32), ForeignKey("indicator.iid", ondelete="CASCADE")) def to_dict(self): _dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} return _dict class IndicatorCategory(Base): __tablename__ = "indicator_category" id = Column(String(12), primary_key=True) title = Column(String(16), unique=True, index=True) def __repr__(self): return self.title def to_kv(self): _dict = dict() _dict.update({"key": self.title}) _dict.update({"value": self.id}) return _dict