CropCd_input.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from sqlalchemy import Column, Integer, Float
  2. from sqlalchemy import ForeignKeyConstraint
  3. from app.database import Base # 统一的基础模型
  4. class CropCdInputData(Base):
  5. """
  6. 作物镉预测模型输入数据模型
  7. 整合作物镉富集预测所需的15个关键参数:
  8. - 土壤颗粒组成(粉粒/砂粒/石砾)
  9. - 速效养分(钾、磷)
  10. - 重金属全量(铝、钙、铁、镁、锰)
  11. - 营养元素(氮、硫)
  12. - 有效态镉转换值(基于MSM输出计算)
  13. """
  14. __tablename__ = 'CropCd_input_data'
  15. # 主键配置
  16. id = Column('ID', Integer, primary_key=True, autoincrement=True,
  17. comment='自增主键')
  18. # 外键字段
  19. farmland_id = Column('Farmland_ID', Integer, nullable=False,
  20. comment='关联农地ID')
  21. sample_id = Column('Sample_ID', Integer, nullable=False,
  22. comment='关联样点ID')
  23. # 土壤颗粒组成
  24. silt_content = Column('002_0002IDW', Float, nullable=True,
  25. comment='粉粒组分(0.002~0.02mm)质量占比[%]')
  26. sand_content = Column('02_002IDW', Float, nullable=True,
  27. comment='砂粒组分(0.02~0.2mm)质量占比[%]')
  28. gravel_content = Column('2_02IDW', Float, nullable=True,
  29. comment='石砾组分(>2mm)质量占比[%]')
  30. # 速效养分 (注意:数据库列名与实际含义的对应关系)
  31. available_potassium = Column('AvaP_IDW', Float, nullable=True,
  32. comment='速效钾(mg/kg)(对应Soil_data.AvaK_IDW)')
  33. available_phosphorus = Column('AvaK_IDW', Float, nullable=True,
  34. comment='有效磷(mg/kg)(对应Soil_data.AvaP_IDW)')
  35. slow_available_potassium = Column('SAvaK_IDW', Float, nullable=True,
  36. comment='缓效钾(mg/kg)')
  37. # 重金属全量
  38. total_aluminum = Column('TAl_IDW', Float, nullable=True,
  39. comment='全铝含量(%)')
  40. total_calcium = Column('TCa_IDW', Float, nullable=True,
  41. comment='全钙含量(%)')
  42. total_iron = Column('TFe_IDW', Float, nullable=True,
  43. comment='全铁含量(%)')
  44. total_magnesium = Column('TMg_IDW', Float, nullable=True,
  45. comment='全镁含量(%)')
  46. total_manganese = Column('TMn_IDW', Float, nullable=True,
  47. comment='全锰含量(mg/kg)')
  48. # 营养元素
  49. total_nitrogen = Column('TN_IDW', Float, nullable=True,
  50. comment='全氮含量(g/kg)')
  51. total_sulfur = Column('TS_IDW', Float, nullable=True,
  52. comment='全硫含量(g/kg)')
  53. # 有效态镉转换值
  54. ln_cd_solution = Column('solution', Float, nullable=True,
  55. comment='LN(POR_Layer/bd020_90 * 112000*Cd.solution)')
  56. # 复合外键约束
  57. __table_args__ = (
  58. ForeignKeyConstraint(
  59. ['Farmland_ID', 'Sample_ID'],
  60. ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID']
  61. ),
  62. {'comment': '作物镉预测模型输入数据'}
  63. )