-
-
Notifications
You must be signed in to change notification settings - Fork 288
Closed
Labels
questionusage and API questionsusage and API questions
Description
Following along with ReplaceableObject
cookbook
https://alembic.sqlalchemy.org/en/latest/cookbook.html#create-initial-migrations
we end up with a migration like:
from alembic import op
import sqlalchemy as sa
from foo import ReplaceableObject
some_sp = ReplaceableObject(
"to_upper(some_text text)",
" RETURNS text AS $$ SELECT upper(text) $$ LANGUAGE sql;")
def upgrade():
op.create_sp(some_sp)
def downgrade():
op.drop_sp(some_sp)
and can refer back to that for a replace
operation in a later migration with
op.replace_sp(some_updated_sp, replaces="28af9800143f.some_sp")
In order for some_sp
to be importable for use in the replaces
parameter, it must be defined outside of the upgrade
and downgrade
functions.
The autogenerate api
@renderers.dispatch_for(ReplaceFunctionOp)
can be used to render ReplaceableObject
s within an upgrade
or downgrade
function but I haven't found the appropriate place to hook to render ReplaceableObject
in the migration's header.
In other words, can easily autogenerate
def upgrade():
some_sp = ReplaceableObject(
"to_upper(some_text text)",
" RETURNS text AS $$ SELECT upper(text) $$ LANGUAGE sql;")
op.create_sp(some_sp)
...
but it isn't clear how to generate
some_sp = ReplaceableObject(
"to_upper(some_text text)",
" RETURNS text AS $$ SELECT upper(text) $$ LANGUAGE sql;")
def upgrade():
op.create_sp(some_sp)
...
Is that the expected approach? If not, I'd really appreciate a nudge in the right direction
Metadata
Metadata
Assignees
Labels
questionusage and API questionsusage and API questions