Description
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!