Skip to content

migrations

Todo

Auto build this page based on database/migrations folder, for example:

Migration {revision id}

down_revision branch_labels depends_on

database.migrations.versions.e5e1bdc106c3_create_state_city_and_address_tables.upgrade()

Create State, City and Address tables based on sqlmodel metadata.

Source code in database/migrations/versions/e5e1bdc106c3_create_state_city_and_address_tables.py
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
def upgrade() -> None:
	"""Create State, City and Address tables based on sqlmodel metadata."""
	op.create_table(
		'cities',
		sa.Column('id', sa.Uuid(), nullable=False),
		sa.Column('ibge', sa.Integer(), nullable=False),
		sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
		sa.Column('ddd', sa.Integer(), nullable=True),
		sa.PrimaryKeyConstraint('id'),
		sa.UniqueConstraint('ibge'),
	)
	op.create_table(
		'states',
		sa.Column('id', sa.Uuid(), nullable=False),
		sa.Column(
			'acronym',
			sa.Enum(
				'AC',
				'AL',
				'AP',
				'AM',
				'BA',
				'CE',
				'DF',
				'ES',
				'GO',
				'MA',
				'MT',
				'MS',
				'MG',
				'PA',
				'PB',
				'PR',
				'PE',
				'PI',
				'RJ',
				'RN',
				'RS',
				'RO',
				'RR',
				'SC',
				'SP',
				'SE',
				'TO',
				name='stateacronym',
			),
			nullable=False,
		),
		sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
		sa.PrimaryKeyConstraint('id'),
		sa.UniqueConstraint('acronym'),
	)
	op.create_table(
		'addresses',
		sa.Column('id', sa.Uuid(), nullable=False),
		sa.Column('zipcode', sa.Integer(), nullable=False),
		sa.Column('state_id', sa.Uuid(), nullable=False),
		sa.Column('city_id', sa.Uuid(), nullable=False),
		sa.Column(
			'neighborhood', sqlmodel.sql.sqltypes.AutoString(), nullable=False
		),
		sa.Column('complement', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
		sa.Column(
			'coordinates',
			postgresql.JSONB(astext_type=sa.Text()),  # type: ignore[no-untyped-call]
			nullable=True,
		),
		sa.Column('updated_at', sa.DateTime(), nullable=False),
		sa.ForeignKeyConstraint(
			['city_id'],
			['cities.id'],
		),
		sa.ForeignKeyConstraint(
			['state_id'],
			['states.id'],
		),
		sa.PrimaryKeyConstraint('id'),
		sa.UniqueConstraint('zipcode'),
	)

database.migrations.versions.e5e1bdc106c3_create_state_city_and_address_tables.downgrade()

Drop address, state and city tables.

Source code in database/migrations/versions/e5e1bdc106c3_create_state_city_and_address_tables.py
123
124
125
126
127
128
def downgrade() -> None:
	"""Drop address, state and city tables."""
	op.drop_table('addresses')
	op.drop_table('states')
	op.drop_table('cities')
	op.execute('DROP TYPE public.stateacronym')

database.migrations.versions.16486dde779e_data_seed_populate_state.upgrade()

Insert all 27 states.

Source code in database/migrations/versions/16486dde779e_data_seed_populate_state.py
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
def upgrade() -> None:
	"""Insert all 27 states."""
	op.bulk_insert(
		State.__table__,  # type: ignore[attr-defined]
		[
			{'id': uuid4(), 'acronym': 'AC', 'name': 'Acre'},
			{'id': uuid4(), 'acronym': 'AL', 'name': 'Alagoas'},
			{'id': uuid4(), 'acronym': 'AP', 'name': 'Amapá'},
			{'id': uuid4(), 'acronym': 'AM', 'name': 'Amazonas'},
			{'id': uuid4(), 'acronym': 'BA', 'name': 'Bahia'},
			{'id': uuid4(), 'acronym': 'CE', 'name': 'Ceará'},
			{'id': uuid4(), 'acronym': 'DF', 'name': 'Distrito Federal'},
			{'id': uuid4(), 'acronym': 'ES', 'name': 'Espírito Santo'},
			{'id': uuid4(), 'acronym': 'GO', 'name': 'Goiás'},
			{'id': uuid4(), 'acronym': 'MA', 'name': 'Maranhão'},
			{'id': uuid4(), 'acronym': 'MT', 'name': 'Mato Grosso'},
			{'id': uuid4(), 'acronym': 'MS', 'name': 'Mato Grosso do Sul'},
			{'id': uuid4(), 'acronym': 'MG', 'name': 'Minas Gerais'},
			{'id': uuid4(), 'acronym': 'PA', 'name': 'Pará'},
			{'id': uuid4(), 'acronym': 'PB', 'name': 'Paraíba'},
			{'id': uuid4(), 'acronym': 'PR', 'name': 'Paraná'},
			{'id': uuid4(), 'acronym': 'PE', 'name': 'Pernambuco'},
			{'id': uuid4(), 'acronym': 'PI', 'name': 'Piauí'},
			{'id': uuid4(), 'acronym': 'RJ', 'name': 'Rio de Janeiro'},
			{'id': uuid4(), 'acronym': 'RN', 'name': 'Rio Grande do Norte'},
			{'id': uuid4(), 'acronym': 'RS', 'name': 'Rio Grande do Sul'},
			{'id': uuid4(), 'acronym': 'RO', 'name': 'Rondônia'},
			{'id': uuid4(), 'acronym': 'RR', 'name': 'Roraima'},
			{'id': uuid4(), 'acronym': 'SC', 'name': 'Santa Catarina'},
			{'id': uuid4(), 'acronym': 'SP', 'name': 'São Paulo'},
			{'id': uuid4(), 'acronym': 'SE', 'name': 'Sergipe'},
			{'id': uuid4(), 'acronym': 'TO', 'name': 'Tocantins'},
		],
	)

database.migrations.versions.16486dde779e_data_seed_populate_state.downgrade()

Remove all 27 states.

Source code in database/migrations/versions/16486dde779e_data_seed_populate_state.py
78
79
80
81
82
83
84
85
def downgrade() -> None:
	"""Remove all 27 states."""
	states = (
		"'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', "
		"'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', "
		"'RR', 'SC', 'SP', 'SE', 'TO'"
	)
	op.execute(f'DELETE FROM states WHERE acronym in ({states})')