92ec1d480a3c_add_soil_table.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. """添加新数据表
  2. Revision ID: 92ec1d480a3c
  3. Revises: beeaf68d0ee1
  4. Create Date: 2025-07-11 03:08:36.151648
  5. """
  6. from alembic import op
  7. import sqlalchemy as sa
  8. # revision identifiers, used by Alembic.
  9. revision = '92ec1d480a3c'
  10. down_revision = 'beeaf68d0ee1'
  11. branch_labels = None
  12. depends_on = None
  13. def upgrade():
  14. """升级数据库到当前版本"""
  15. # ### commands auto generated by Alembic - please adjust! ###
  16. op.create_table('Soil_data',
  17. sa.Column('ID', sa.Integer(), autoincrement=True, nullable=False, comment='自增主键'),
  18. sa.Column('Farmland_ID', sa.Integer(), nullable=False, comment='关联Farmland_data表的Farmland_ID'),
  19. sa.Column('Sample_ID', sa.Integer(), nullable=False, comment='关联Farmland_data表的Sample_ID'),
  20. sa.Column('0002IDW', sa.Float(), nullable=True, comment='粒径<0.002mm的黏粒组分占比(%)'),
  21. sa.Column('bd020_90', sa.Float(), nullable=True, comment='容重(g/cm³),使用时需除1000'),
  22. sa.Column('POR_Layer', sa.Float(), nullable=True, comment='土壤孔隙度(cm³/cm³)'),
  23. sa.Column('ExAl_IDW', sa.Float(), nullable=True, comment='交换性Al³⁺[cmol(1/3Al³⁺)/kg]'),
  24. sa.Column('ExCa_IDW', sa.Float(), nullable=True, comment='交换性Ca²⁺[cmol(1/2Ca²⁺)/kg]'),
  25. sa.Column('ExK_IDW', sa.Float(), nullable=True, comment='交换性K⁺[cmol(K⁺)/kg]'),
  26. sa.Column('ExMg_IDW', sa.Float(), nullable=True, comment='交换性Mg²⁺[cmol(1/2Mg²⁺)/kg]'),
  27. sa.Column('ExNa_IDW', sa.Float(), nullable=True, comment='交换性Na⁺[cmol(Na⁺)/kg]'),
  28. sa.Column('Fed_IDW', sa.Float(), nullable=True, comment='游离铁(g/kg)'),
  29. sa.Column('SOM_IDW', sa.Float(), nullable=True, comment='有机质(g/kg)'),
  30. sa.Column('IDW_2013PC_Cd', sa.Float(), nullable=True, comment='2013年普查总镉(mg/kg)'),
  31. sa.Column('IDW_2018XC_Cd', sa.Float(), nullable=True, comment='2018年详查总镉(mg/kg)'),
  32. sa.Column('IDW_2023SP_Cd', sa.Float(), nullable=True, comment='2023年三普镉(mg/kg)'),
  33. sa.Column('IDW_2013PC_pH', sa.Float(), nullable=True, comment='2013年普查pH值'),
  34. sa.Column('IDW_2018XC_pH', sa.Float(), nullable=True, comment='2018年详查pH值'),
  35. sa.Column('IDW_2023SP_pH', sa.Float(), nullable=True, comment='2023年三普pH值'),
  36. sa.Column('002_0002IDW', sa.Float(), nullable=True, comment='粉粒组分(0.002~0.02mm)占比(%)'),
  37. sa.Column('02_002IDW', sa.Float(), nullable=True, comment='砂粒组分(0.02~0.2mm)占比(%)'),
  38. sa.Column('2_02IDW', sa.Float(), nullable=True, comment='石砾组分(>2mm)占比(%)'),
  39. sa.Column('AvaK_IDW', sa.Float(), nullable=True, comment='速效钾(mg/kg)'),
  40. sa.Column('AvaP_IDW', sa.Float(), nullable=True, comment='有效磷(mg/kg)'),
  41. sa.Column('CEC_IDW', sa.Float(), nullable=True, comment='阳离子交换量[cmol(+)/kg]'),
  42. sa.Column('EC_IDW', sa.Float(), nullable=True, comment='电导率(mS/cm)'),
  43. sa.Column('OC-Fe_0-30', sa.Float(), nullable=True, comment='土壤铁结合态有机碳(g/kg)'),
  44. sa.Column('SAvaK_IDW', sa.Float(), nullable=True, comment='缓效钾(mg/kg)'),
  45. sa.Column('TAl_IDW', sa.Float(), nullable=True, comment='全铝(%)'),
  46. sa.Column('TCa_IDW', sa.Float(), nullable=True, comment='全钙(%)'),
  47. sa.Column('TCd_IDW', sa.Float(), nullable=True, comment='总镉(mg/kg)'),
  48. sa.Column('TEB_IDW', sa.Float(), nullable=True, comment='水溶性盐总量(mg/L)'),
  49. sa.Column('TExH_IDW', sa.Float(), nullable=True, comment='交换性酸总量[cmol (H⁺ + 1/3Al³⁺)/kg]'),
  50. sa.Column('TFe_IDW', sa.Float(), nullable=True, comment='全铁(%)'),
  51. sa.Column('TK_IDW', sa.Float(), nullable=True, comment='全钾(g/kg)'),
  52. sa.Column('TMg_IDW', sa.Float(), nullable=True, comment='全镁(%)'),
  53. sa.Column('TMn_IDW', sa.Float(), nullable=True, comment='全锰(mg/kg)'),
  54. sa.Column('TN_IDW', sa.Float(), nullable=True, comment='全氮(g/kg)'),
  55. sa.Column('TP_IDW', sa.Float(), nullable=True, comment='全磷(g/kg)'),
  56. sa.Column('TS_IDW', sa.Float(), nullable=True, comment='全硫(g/kg)'),
  57. sa.Column('DQCJ_Cd', sa.Float(), nullable=True, comment='大气沉降输入Cd(g/ha/a)'),
  58. sa.Column('GGS_Cd', sa.Float(), nullable=True, comment='灌溉水输入Cd(g/ha/a)'),
  59. sa.Column('DX_Cd', sa.Float(), nullable=True, comment='地下渗漏Cd(g/ha/a)'),
  60. sa.Column('DB_Cd', sa.Float(), nullable=True, comment='地表径流Cd(g/ha/a)'),
  61. sa.ForeignKeyConstraint(['Farmland_ID', 'Sample_ID'], ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID'], ),
  62. sa.PrimaryKeyConstraint('ID'),
  63. comment='土壤理化性质数据表,存储关联的耕地样点土壤指标'
  64. )
  65. op.drop_index('idx_farmland_data_geom', table_name='Farmland_data', postgresql_using='gist')
  66. op.drop_index('raster_table_st_convexhull_idx1', table_name='raster_table', postgresql_using='gist')
  67. op.drop_index('raster_table_st_convexhull_idx2', table_name='raster_table', postgresql_using='gist')
  68. op.drop_index('raster_table_st_convexhull_idx3', table_name='raster_table', postgresql_using='gist')
  69. op.drop_index('raster_table_st_convexhull_idx4', table_name='raster_table', postgresql_using='gist')
  70. op.drop_index('raster_table_st_convexhull_idx5', table_name='raster_table', postgresql_using='gist')
  71. op.drop_index('raster_table_st_convexhull_idx6', table_name='raster_table', postgresql_using='gist')
  72. op.drop_index('raster_table_st_convexhull_idx7', table_name='raster_table', postgresql_using='gist')
  73. op.create_index('idx_raster_table_rast', 'raster_table', [sa.text('ST_ConvexHull(rast)')], unique=False, postgresql_using='gist')
  74. # ### end Alembic commands ###
  75. def downgrade():
  76. """将数据库降级到上一版本"""
  77. # ### commands auto generated by Alembic - please adjust! ###
  78. op.drop_index('idx_raster_table_rast', table_name='raster_table', postgresql_using='gist')
  79. op.create_index('raster_table_st_convexhull_idx7', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  80. op.create_index('raster_table_st_convexhull_idx6', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  81. op.create_index('raster_table_st_convexhull_idx5', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  82. op.create_index('raster_table_st_convexhull_idx4', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  83. op.create_index('raster_table_st_convexhull_idx3', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  84. op.create_index('raster_table_st_convexhull_idx2', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  85. op.create_index('raster_table_st_convexhull_idx1', 'raster_table', [sa.text('st_convexhull(rast)')], unique=False, postgresql_using='gist')
  86. op.create_index('idx_farmland_data_geom', 'Farmland_data', ['geom'], unique=False, postgresql_using='gist')
  87. op.drop_table('Soil_data')
  88. # ### end Alembic commands ###