creditrating/BM02_指标仓库/Models/IndexStoreModels.py

58 lines
1.9 KiB
Python

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