Skip to content

Computed column migration file generated incorrectly #624

Closed
@deuce2367

Description

@deuce2367

SQLAlchemy version 1.3.11 (just released on November 11th, 2019) includes support for Computed columns. From their documentation an example Computed column definition would be something like:

Column("area", Integer, Computed("side * side"))

After adding such a Computed column definition to my table model and trying to use alembic to autogenerate a migration file I encounter the following error:

    resolved_id, branch_label = self._resolve_revision_number(id_)
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/script/revision.py", line 501, in _resolve_revision_number
    self._revision_map
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/util/langhelpers.py", line 230, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/script/revision.py", line 123, in _revision_map
    for revision in self._generator():
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/script/base.py", line 112, in _load_revisions
    script = Script._from_filename(self, vers, file_)
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/script/base.py", line 906, in _from_filename
    module = util.load_python_file(dir_, filename)
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file
    module = load_module_py(module_id, path)
  File "/home/dev.internal/developer/sandbox/mbs/venv/lib/python3.7/site-packages/alembic/util/compat.py", line 173, in load_module_py
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 724, in exec_module
  File "<frozen importlib._bootstrap_external>", line 860, in get_code
  File "<frozen importlib._bootstrap_external>", line 791, in source_to_code
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/dev.internal/developer/sandbox/mbs/migrations/versions/9396eb21e075_tip_add_user_index_generated_user_.py", line 21
    op.add_column('usertable', sa.Column('user', sa.String(length=36), server_default=Computed(<sqlalchemy.sql.elements.TextClause object at 0x7febef2d30f0>, persisted=False), nullable=True))

I found that that if I hacked in a str() implementation to the Computed class definition in SQLAlchemy I was able to use alembic successfully however I'm not sure if that's the most elegant solution.

I'm using alembic version 1.3.0, sqlalchemy 1.3.11 (and MySQL 8.0.17 although I don't believe that matters as far as this issue is concerned).

I really appreciate any help or suggestions!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions