EffCd_input.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from sqlalchemy import Column, Integer, Float
  2. from sqlalchemy import ForeignKeyConstraint
  3. from app.database import Base # 统一的Base导入
  4. class EffCdInputData(Base):
  5. """
  6. 有效态镉预测模型输入数据模型
  7. 存储预测土壤有效态镉所需的所有输入参数,包括:
  8. - 土壤理化性质指标
  9. - 有机质-铁结合态参数
  10. - 颗粒组成数据(黏土、粉粒、砂粒、石砾)
  11. - 养分元素含量(速效钾、有效磷等)
  12. - 重金属元素总量
  13. - 络合模型输出转化值
  14. 该模型通过Farmland_ID和Sample_ID与农田样点数据关联
  15. """
  16. __tablename__ = 'EffCd_input_data'
  17. # 主键配置
  18. id = Column('ID', Integer, primary_key=True, autoincrement=True,
  19. comment='主键ID')
  20. # 外键关联到农田样点
  21. farmland_id = Column('Farmland_ID', Integer, nullable=False)
  22. sample_id = Column('Sample_ID', Integer, nullable=False)
  23. # 有机质-铁结合态参数
  24. oc_fe_0_30 = Column('OC-Fe_0-30', Float, nullable=True,
  25. comment='土壤铁结合态有机碳(g/kg)')
  26. # 土壤颗粒组成
  27. silt_content = Column('002_0002IDW', Float, nullable=True,
  28. comment='粉粒组分(0.002~0.02mm)质量占比[%]')
  29. sand_content = Column('02_002IDW', Float, nullable=True,
  30. comment='砂粒组分(0.02~0.2mm)质量占比[%]')
  31. gravel_content = Column('2_02IDW', Float, nullable=True,
  32. comment='石砾组分(>2mm)质量占比[%]')
  33. # 养分元素
  34. available_potassium = Column('AvaK_IDW', Float, nullable=True,
  35. comment='速效钾(mg/kg)')
  36. available_phosphorus = Column('AvaP_IDW', Float, nullable=True,
  37. comment='有效磷(mg/kg)')
  38. electrical_conductivity = Column('EC_IDW', Float, nullable=True,
  39. comment='电导率(mS/cm)')
  40. slow_available_potassium = Column('SAvaK_IDW', Float, nullable=True,
  41. comment='缓效钾(mg/kg)')
  42. # 重金属及营养元素总量
  43. total_aluminum = Column('TAl_IDW', Float, nullable=True,
  44. comment='全铝含量(%)')
  45. total_calcium = Column('TCa_IDW', Float, nullable=True,
  46. comment='全钙含量(%)')
  47. total_cadmium = Column('TCd_IDW', Float, nullable=True,
  48. comment='总镉含量(mg/kg)')
  49. soluble_salts = Column('TEB_IDW', Float, nullable=True,
  50. comment='水溶性盐总量(mg/L)')
  51. exchangeable_acidity = Column('TExH_IDW', Float, nullable=True,
  52. comment='交换性酸总量[cmol/kg]')
  53. total_iron = Column('TFe_IDW', Float, nullable=True,
  54. comment='全铁含量(%)')
  55. total_potassium = Column('TK_IDW', Float, nullable=True,
  56. comment='全钾含量(g/kg)')
  57. total_magnesium = Column('TMg_IDW', Float, nullable=True,
  58. comment='全镁含量(%)')
  59. total_manganese = Column('TMn_IDW', Float, nullable=True,
  60. comment='全锰含量(mg/kg)')
  61. total_nitrogen = Column('TN_IDW', Float, nullable=True,
  62. comment='全氮含量(g/kg)')
  63. total_phosphorus = Column('TP_IDW', Float, nullable=True,
  64. comment='全磷含量(g/kg)')
  65. total_sulfur = Column('TS_IDW', Float, nullable=True,
  66. comment='全硫含量(g/kg)')
  67. # 络合模型输出转换值
  68. cd_solution = Column('Cdsolution', Float, nullable=True,
  69. comment='LN(POR_Layer/bd020_90 * 112000*Cd.solution)')
  70. # 复合外键约束,确保数据一致性
  71. __table_args__ = (
  72. ForeignKeyConstraint(
  73. ['Farmland_ID', 'Sample_ID'],
  74. ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID']
  75. ),
  76. {'comment': '有效态镉预测模型输入数据'}
  77. )