cansjt · GitHub

Describe the bug
Batch operation op.batch_alter_table(...).add_column() method cannot add a column that comes with a comment.

Comment support is fairly new, maybe this is a "feature" due to some constraint I am not aware of ?

Expected behavior

The column is added to the table and the appropriate comment is defined for the column.

To Reproduce

I believe the following migration script, the one I found the issue with, stripped of anything unrelated to the bug, should provide the minimal amount of code to reproduce the bug:

from alembic import op
import sqlalchemy as sa
revision = '792d2e012c4a'
down_revision = None  # Obviously there exists other migrations that created the table in the first place
def upgrade():
    with op.batch_alter_table('some_table', schema='some_schema') as batch_op:
        batch_op.add_column(sa.Column('column_name', sa.Integer, nullable=True, comment="some comment"))
        # More operations may come here

Error

  File "~/.virtualenvs/project/bin/alembic", line 8, in <module>
    sys.exit(main())
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/config.py", line 581, in main
    CommandLine(prog=prog).main(argv=argv)
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/config.py", line 575, in main
    self.run_cmd(cfg, options)
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/config.py", line 555, in run_cmd
    **dict((k, getattr(options, k, None)) for k in kwarg)
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/command.py", line 298, in upgrade
    script.run_env()
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/script/base.py", line 489, in run_env
    util.load_python_file(self.dir, "env.py")
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file
    module = load_module_py(module_id, path)
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/util/compat.py", line 184, in load_module_py
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "src/dags/stats/migrations/env.py", line 145, in <module>
    run_migrations_online()
  File "src/dags/stats/migrations/env.py", line 138, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/runtime/environment.py", line 846, in run_migrations
    self.get_context().run_migrations(**kw)
  File "~/.virtualenvs/project/lib/python3.7/site-packages/alembic/runtime/migration.py", line 522, in run_migrations
    step.migration_fn(**kw)
  File "src/dags/stats/migrations/versions/792d2e012c4a_migration_script_.py", line 51, in upgrade
    batch_op.add_column(sa.Column('column_name', sa.Integer, nullable=True, comment="some comment"))
  File "<string>", line 3, in add_column
  File "~/.virtualenvs/jfdags/lib/python3.7/site-packages/alembic/operations/ops.py", line 1956, in batch_add_column
    return operations.invoke(op)
  File "~/.virtualenvs/jfdags/lib/python3.7/site-packages/alembic/operations/base.py", line 373, in invoke
    return fn(self, operation)
  File "~/.virtualenvs/jfdags/lib/python3.7/site-packages/alembic/operations/toimpl.py", line 146, in add_column
    operations.impl.create_column_comment(column)
AttributeError: 'BatchOperationsImpl' object has no attribute 'create_column_comment'

Versions.

  • OS: Ubuntu 2020.04
  • Python: 3.7.9
  • Alembic: 1.4.3
  • SQLAlchemy: 1.3.20
  • Database: Postgresql
  • DBAPI: psycopg2

Additional context

Have a nice day!
You too !

Read the original on github.com ↗