from sqlalchemy import Column, Integer, Float from sqlalchemy import ForeignKeyConstraint from app.database import Base # 统一的基础模型 class CropCdInputData(Base): """ 作物镉预测模型输入数据模型 整合作物镉富集预测所需的15个关键参数: - 土壤颗粒组成(粉粒/砂粒/石砾) - 速效养分(钾、磷) - 重金属全量(铝、钙、铁、镁、锰) - 营养元素(氮、硫) - 有效态镉转换值(基于MSM输出计算) """ __tablename__ = 'CropCd_input_data' # 主键配置 id = Column('ID', Integer, primary_key=True, autoincrement=True, comment='自增主键') # 外键字段 farmland_id = Column('Farmland_ID', Integer, nullable=False, comment='关联农地ID') sample_id = Column('Sample_ID', Integer, nullable=False, comment='关联样点ID') # 土壤颗粒组成 silt_content = Column('002_0002IDW', Float, nullable=True, comment='粉粒组分(0.002~0.02mm)质量占比[%]') sand_content = Column('02_002IDW', Float, nullable=True, comment='砂粒组分(0.02~0.2mm)质量占比[%]') gravel_content = Column('2_02IDW', Float, nullable=True, comment='石砾组分(>2mm)质量占比[%]') # 速效养分 (注意:数据库列名与实际含义的对应关系) available_potassium = Column('AvaP_IDW', Float, nullable=True, comment='速效钾(mg/kg)(对应Soil_data.AvaK_IDW)') available_phosphorus = Column('AvaK_IDW', Float, nullable=True, comment='有效磷(mg/kg)(对应Soil_data.AvaP_IDW)') slow_available_potassium = Column('SAvaK_IDW', Float, nullable=True, comment='缓效钾(mg/kg)') # 重金属全量 total_aluminum = Column('TAl_IDW', Float, nullable=True, comment='全铝含量(%)') total_calcium = Column('TCa_IDW', Float, nullable=True, comment='全钙含量(%)') total_iron = Column('TFe_IDW', Float, nullable=True, comment='全铁含量(%)') total_magnesium = Column('TMg_IDW', Float, nullable=True, comment='全镁含量(%)') total_manganese = Column('TMn_IDW', Float, nullable=True, comment='全锰含量(mg/kg)') # 营养元素 total_nitrogen = Column('TN_IDW', Float, nullable=True, comment='全氮含量(g/kg)') total_sulfur = Column('TS_IDW', Float, nullable=True, comment='全硫含量(g/kg)') # 有效态镉转换值 ln_cd_solution = Column('solution', Float, nullable=True, comment='LN(POR_Layer/bd020_90 * 112000*Cd.solution)') # 复合外键约束 __table_args__ = ( ForeignKeyConstraint( ['Farmland_ID', 'Sample_ID'], ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID'] ), {'comment': '作物镉预测模型输入数据'} )