Hi,

I have a use-case where I need to execute a function called *audit_table* after 
a new table is created in my migrations. So I thought I would be able to 
use alembic.operations.ops.ExecuteSQLOp 
<http://alembic.readthedocs.org/en/latest/api/operations.html#alembic.operations.ops.ExecuteSQLOp>,
 
but I can't find any code that shows me how to actually use it. By reading 
the API documentation I thought this would be the way:


from alembic.autogenerate import rewriter
from alembic.operations import ops

writer = rewriter.Rewriter()

@writer.rewrites(ops.CreateTableOp)
def create_table(context, revision, op):
    return [
        op,
        ops.ExecuteSQLOp(
            sa.select([sa.func.audit_table(op.table_name)])
        )
    ]

def run_migrations_online():
    ...
    context.configure(
        ...,
        process_revision_directives=writer,


But then I get the following traceback:

Traceback (most recent call last):
  File "/venv/bin/alembic", line 11, in <module>
    sys.exit(main())
  File "/venv/lib/python3.5/site-packages/alembic/config.py", line 450, in 
main
    CommandLine(prog=prog).main(argv=argv)
  File "/venv/lib/python3.5/site-packages/alembic/config.py", line 444, in 
main
    self.run_cmd(cfg, options)
  File "/venv/lib/python3.5/site-packages/alembic/config.py", line 427, in 
run_cmd
    **dict((k, getattr(options, k)) for k in kwarg)
  File "/venv/lib/python3.5/site-packages/alembic/command.py", line 121, in 
revision
    revision_context.generate_scripts()
  File "/venv/lib/python3.5/site-packages/alembic/command.py", line 120, in 
<listcomp>
    script for script in
  File "/venv/lib/python3.5/site-packages/alembic/autogenerate/api.py", 
line 430, in generate_scripts
    yield self._to_script(generated_revision)
  File "/venv/lib/python3.5/site-packages/alembic/autogenerate/api.py", 
line 354, in _to_script
    autogen_context, migration_script, template_args
  File "/venv/lib/python3.5/site-packages/alembic/autogenerate/render.py", 
line 40, in _render_python_into_templatevars
    _render_cmd_body(upgrade_ops, autogen_context))
  File "/venv/lib/python3.5/site-packages/alembic/autogenerate/render.py", 
line 63, in _render_cmd_body
    lines = render_op(autogen_context, op)
  File "/venv/lib/python3.5/site-packages/alembic/autogenerate/render.py", 
line 74, in render_op
    renderer = renderers.dispatch(op)
  File "/venv/lib/python3.5/site-packages/alembic/util/langhelpers.py", 
line 309, in dispatch
    raise ValueError("no dispatch function for object: %s" % obj)
ValueError: no dispatch function for object: 
<alembic.operations.ops.ExecuteSQLOp object at 0x10f236860>

I've also tried to pass in the SQL command as a regular string to 
ExecuteSQLOp, but I still get the same exception.

Could someone tell me what the correct way to use it is? Perhaps I haven't 
understood correctly what *ExecuteSQLOp* is used for.

Thanks,
Jacob

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy-alembic" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to