From aa2ccd8483bced33b53b0e2b38c0f94f291f344b Mon Sep 17 00:00:00 2001 From: david-fed <47917339+david-fed@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:44:15 -0400 Subject: [PATCH] Fixed missing prefix on FetchedValue Fixed the rendering of ``server_default=FetchedValue()`` to ensure it is preceded by the ``sa.`` prefix in the migration script. Pull request courtesy david-fed. Fixes: #1633 Closes: #1691 Pull-request: https://github.com/sqlalchemy/alembic/pull/1691 Pull-request-sha: 468ad598c7975d240c3b9911585b3367f32900af Change-Id: I828655e26c5e6d2a39d5407dbcc20bda19d11a7a --- alembic/autogenerate/render.py | 8 ++++++++ docs/build/unreleased/1633.rst | 7 +++++++ tests/test_autogen_render.py | 10 ++++++++++ 3 files changed, 25 insertions(+) create mode 100644 docs/build/unreleased/1633.rst diff --git a/alembic/autogenerate/render.py b/alembic/autogenerate/render.py index bd20ced8..64fe72b1 100644 --- a/alembic/autogenerate/render.py +++ b/alembic/autogenerate/render.py @@ -813,6 +813,8 @@ def _render_server_default( return _render_potential_expr( default.arg, autogen_context, is_server_default=True ) + elif isinstance(default, sa_schema.FetchedValue): + return _render_fetched_value(autogen_context) if isinstance(default, str) and repr_: default = repr(re.sub(r"^'|'$", "", default)) @@ -850,6 +852,12 @@ def _render_identity( } +def _render_fetched_value(autogen_context: AutogenContext) -> str: + return "%(prefix)sFetchedValue()" % { + "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), + } + + def _repr_type( type_: TypeEngine, autogen_context: AutogenContext, diff --git a/docs/build/unreleased/1633.rst b/docs/build/unreleased/1633.rst new file mode 100644 index 00000000..3d38f5e7 --- /dev/null +++ b/docs/build/unreleased/1633.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, autogenerate + :tickets: 1633 + + Fixed the rendering of ``server_default=FetchedValue()`` to ensure it is + preceded by the ``sa.`` prefix in the migration script. Pull request + courtesy david-fed. diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index c098aca4..9ca572fb 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -11,6 +11,7 @@ from sqlalchemy import DATETIME from sqlalchemy import DateTime from sqlalchemy import DefaultClause from sqlalchemy import Enum +from sqlalchemy import FetchedValue from sqlalchemy import ForeignKey from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func @@ -2058,6 +2059,15 @@ class AutogenRenderTest(TestBase): "server_default='0', nullable=True)", ) + def test_render_server_default_fetched_value(self): + c = Column("value", Integer, server_default=FetchedValue()) + result = autogenerate.render._render_column(c, self.autogen_context) + eq_( + result, + "sa.Column('value', sa.Integer(), " + "server_default=sa.FetchedValue(), nullable=True)", + ) + def test_render_modify_reflected_int_server_default(self): op_obj = ops.AlterColumnOp( "sometable", -- 2.47.3