EffCd_output.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # app/models/effcd_output.py
  2. from sqlalchemy import Column, Integer, Float
  3. from sqlalchemy import ForeignKeyConstraint
  4. from app.database import Base # 统一的基础模型
  5. class EffCdOutputData(Base):
  6. """
  7. 有效态镉预测模型输出数据模型
  8. 存储预测模型计算的对数化有效态镉浓度,可通过指数函数还原为实际浓度:
  9. EffCd = exp(LnEffCd) [单位:mg/kg]
  10. 模型特点:
  11. - 通过Farmland_ID/Sample_ID与农田样点严格关联
  12. - 核心输出字段需经指数转换获取物理意义值
  13. - 可用于直接评估农田有效态镉污染水平
  14. """
  15. __tablename__ = 'EffCd_output_data'
  16. # 主键配置
  17. id = Column('ID', Integer, primary_key=True, autoincrement=True,
  18. comment='自增主键')
  19. # 外键字段(关联农田样点)
  20. farmland_id = Column('Farmland_ID', Integer, nullable=False,
  21. comment='关联农地ID')
  22. sample_id = Column('Sample_ID', Integer, nullable=False,
  23. comment='关联样点ID')
  24. # 模型输出结果
  25. ln_eff_cd = Column('LnEffCd', Float, nullable=False,
  26. comment='有效态镉浓度的自然对数值[ln(mg/kg)]')
  27. # 复合外键约束
  28. __table_args__ = (
  29. ForeignKeyConstraint(
  30. ['Farmland_ID', 'Sample_ID'],
  31. ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID']
  32. ),
  33. {'comment': '有效态镉预测模型输出数据'}
  34. )
  35. # 转换方法:获取实际有效态镉浓度
  36. def effective_cadmium(self):
  37. """
  38. 计算实际有效态镉浓度(单位:mg/kg)
  39. 公式: EffCd = exp(LnEffCd)
  40. """
  41. import math
  42. return math.exp(self.ln_eff_cd)