creditrating-wcq/IndexStore/AppIndicators/Models.py

61 lines
1.9 KiB
Python
Raw Permalink Normal View History

2023-02-20 09:44:05 +08:00
from sqlalchemy import Column, String, Enum, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.dialects.mysql import LONGTEXT
from IndexStore.AppIndicators.Schemas import NatureEnum
from Utils.DataBase.IndexStore.SqlAlchemyUtils import Base, engine
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)
_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
Base.metadata.create_all(bind=engine)