12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from sqlalchemy import Column, Integer, Float, String
- from sqlalchemy import ForeignKey, ForeignKeyConstraint
- from geoalchemy2 import Geometry
- from app.database import Base
- class MSMInputData(Base):
- """
- 络合模型输入数据模型
- 存储络合模型(MSM)计算所需的所有输入参数
- 模型逻辑:
- 1. 每个记录对应农田样点(Farmland_data)的特定样本
- 2. 大部分数值通过Soil_data和Parameters表数据计算得来
- 3. Var字段标识数据类型来源(如:实测值/普查值)
- """
- __tablename__ = 'MSM_input_data'
- # 主键
- id = Column('ID', Integer, primary_key=True, autoincrement=True)
- # 外键参考Farmland_data表 (复合主键)
- farmland_id = Column('Farmland_ID', Integer, nullable=False)
- sample_id = Column('Sample_ID', Integer, nullable=False)
- # 外键约束定义
- __table_args__ = (
- ForeignKeyConstraint(
- ['Farmland_ID', 'Sample_ID'],
- ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID']
- ),
- {'comment': '络合模型输入数据模型'}
- )
- # 过程模型数据索引符 - 标识数据来源(如:PC2013实测、XC2018普查、SP2023三普)
- var = Column('Var', String(20), nullable=False, comment='过程模型数据索引符')
- # 化学参数字段(带默认值的列)
- co2_tot = Column('CO2_g_tot', Float, default=1e-5, nullable=False,
- comment='二氧化碳全量值')
- water_volume = Column('watervolume', Float, nullable=True,
- comment='土壤水体积[cm³/cm³] = Soil_data.POR_Layer')
- sl_ratio = Column('SL', Float, nullable=True,
- comment='固液比 = (1-POR_Layer)*bd020_90/(POR_Layer*1)')
- ph_value = Column('pH', Float, nullable=True,
- comment='pH值(实测或Soil_data中IDW_*_pH三者之一)')
- # 金属离子浓度 (mol/L)
- ca_tot = Column('Ca_plus2_tot', Float, nullable=True,
- comment='总游离钙 = ExCa_IDW*0.005/(POR_Layer/bd020_90)')
- mg_tot = Column('Mg_plus2_tot', Float, nullable=True,
- comment='总游离镁 = ExMg_IDW*0.005/(POR_Layer/bd020_90)')
- k_tot = Column('K_plus_tot', Float, nullable=True,
- comment='总游离钾 = ExK_IDW*0.005/(POR_Layer/bd020_90)')
- na_tot = Column('Na_plus_tot', Float, nullable=True,
- comment='总游离钠 = ExNa_IDW*0.005/(POR_Layer/bd020_90)')
- cl_tot = Column('Cl_minus_tot', Float, nullable=True,
- comment='总游离氯 = (Ca_tot+Mg_tot)*2 + K_tot + Na_tot')
- cd_tot = Column('Cd_tot', Float, nullable=True,
- comment='总游离镉 = Cd/112000/(POR_Layer/bd020_90)')
- # 土壤成分 (kg/kg)
- hfo_kgkg = Column('HFO_kgkg', Float, nullable=True,
- comment='不定型铁 = Fed_IDW/1000 + ExAl_IDW*0.00009')
- clay_kgkg = Column('CLAY_kgkg', Float, nullable=True,
- comment='粘土矿物 = Soil_data.0002IDW')
- ha_kgkg = Column('HA_kgkg', Float, nullable=True,
- comment='活性胡敏酸 = SOM_IDW/1724*F1*F2')
- fa_kgkg = Column('FA_kgkg', Float, nullable=True,
- comment='活性富里酸 = SOM_IDW/1724*F1*(1-F2)')
|