d89bb52ae481_add_provinces_and_cities_tables.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """add_provinces_and_cities_tables
  2. Revision ID: d89bb52ae481
  3. Revises: e52e802fe61a
  4. Create Date: 2025-08-09 19:40:59.929438
  5. """
  6. from alembic import op
  7. import sqlalchemy as sa
  8. import geoalchemy2
  9. # revision identifiers, used by Alembic.
  10. revision = 'd89bb52ae481'
  11. down_revision = 'e52e802fe61a'
  12. branch_labels = None
  13. depends_on = None
  14. def upgrade():
  15. """升级数据库到当前版本"""
  16. # 创建provinces表
  17. op.create_table('provinces',
  18. sa.Column('id', sa.Integer(), nullable=False),
  19. sa.Column('name', sa.String(length=100), nullable=False, comment='省名'),
  20. sa.Column('code', sa.Integer(), nullable=False, comment='省代码'),
  21. sa.Column('geometry', geoalchemy2.types.Geometry(geometry_type='MULTIPOLYGON', srid=4326, from_text='ST_GeomFromEWKT', name='geometry', nullable=False), nullable=False, comment='省级行政区划的几何数据'),
  22. sa.Column('geojson', sa.JSON(), nullable=False, comment='完整的GeoJSON数据'),
  23. sa.PrimaryKeyConstraint('id'),
  24. sa.UniqueConstraint('code')
  25. )
  26. op.create_index('idx_provinces_code', 'provinces', ['code'], unique=False)
  27. op.create_index('idx_provinces_name', 'provinces', ['name'], unique=False)
  28. op.create_index(op.f('ix_provinces_id'), 'provinces', ['id'], unique=False)
  29. # 创建cities表
  30. op.create_table('cities',
  31. sa.Column('id', sa.Integer(), nullable=False),
  32. sa.Column('name', sa.String(length=100), nullable=False, comment='市名'),
  33. sa.Column('code', sa.Integer(), nullable=False, comment='市代码'),
  34. sa.Column('province_name', sa.String(length=100), nullable=False, comment='省名'),
  35. sa.Column('province_code', sa.Integer(), nullable=False, comment='省代码'),
  36. sa.Column('geometry', geoalchemy2.types.Geometry(geometry_type='MULTIPOLYGON', srid=4326, from_text='ST_GeomFromEWKT', name='geometry', nullable=False), nullable=False, comment='市级行政区划的几何数据'),
  37. sa.Column('geojson', sa.JSON(), nullable=False, comment='完整的GeoJSON数据'),
  38. sa.PrimaryKeyConstraint('id'),
  39. sa.UniqueConstraint('code')
  40. )
  41. op.create_index('idx_cities_code', 'cities', ['code'], unique=False)
  42. op.create_index('idx_cities_name', 'cities', ['name'], unique=False)
  43. op.create_index('idx_cities_province_code', 'cities', ['province_code'], unique=False)
  44. op.create_index(op.f('ix_cities_id'), 'cities', ['id'], unique=False)
  45. def downgrade():
  46. """降级数据库到上一个版本"""
  47. # 删除cities表
  48. op.drop_index(op.f('ix_cities_id'), table_name='cities')
  49. op.drop_index('idx_cities_province_code', table_name='cities')
  50. op.drop_index('idx_cities_name', table_name='cities')
  51. op.drop_index('idx_cities_code', table_name='cities')
  52. op.drop_table('cities')
  53. # 删除provinces表
  54. op.drop_index(op.f('ix_provinces_id'), table_name='provinces')
  55. op.drop_index('idx_provinces_name', table_name='provinces')
  56. op.drop_index('idx_provinces_code', table_name='provinces')
  57. op.drop_table('provinces')