from sqlalchemy import Column, Integer, Float from sqlalchemy import ForeignKeyConstraint from app.database import Base # 统一的Base导入 class EffCdInputData(Base): """ 有效态镉预测模型输入数据模型 存储预测土壤有效态镉所需的所有输入参数,包括: - 土壤理化性质指标 - 有机质-铁结合态参数 - 颗粒组成数据(黏土、粉粒、砂粒、石砾) - 养分元素含量(速效钾、有效磷等) - 重金属元素总量 - 络合模型输出转化值 该模型通过Farmland_ID和Sample_ID与农田样点数据关联 """ __tablename__ = 'EffCd_input_data' # 主键配置 id = Column('ID', Integer, primary_key=True, autoincrement=True, comment='主键ID') # 外键关联到农田样点 farmland_id = Column('Farmland_ID', Integer, nullable=False) sample_id = Column('Sample_ID', Integer, nullable=False) # 有机质-铁结合态参数 oc_fe_0_30 = Column('OC-Fe_0-30', Float, nullable=True, comment='土壤铁结合态有机碳(g/kg)') # 土壤颗粒组成 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('AvaK_IDW', Float, nullable=True, comment='速效钾(mg/kg)') available_phosphorus = Column('AvaP_IDW', Float, nullable=True, comment='有效磷(mg/kg)') electrical_conductivity = Column('EC_IDW', Float, nullable=True, comment='电导率(mS/cm)') 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_cadmium = Column('TCd_IDW', Float, nullable=True, comment='总镉含量(mg/kg)') soluble_salts = Column('TEB_IDW', Float, nullable=True, comment='水溶性盐总量(mg/L)') exchangeable_acidity = Column('TExH_IDW', Float, nullable=True, comment='交换性酸总量[cmol/kg]') total_iron = Column('TFe_IDW', Float, nullable=True, comment='全铁含量(%)') total_potassium = Column('TK_IDW', Float, nullable=True, comment='全钾含量(g/kg)') 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_phosphorus = Column('TP_IDW', Float, nullable=True, comment='全磷含量(g/kg)') total_sulfur = Column('TS_IDW', Float, nullable=True, comment='全硫含量(g/kg)') # 络合模型输出转换值 cd_solution = Column('Cdsolution', 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': '有效态镉预测模型输入数据'} )