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.