Re: autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`
Hello Thank you for your answer. The problem was that the entry db_name was missing from the alembic.ini file. It is not how I configure the engine. However add something like: config.set_main_option("databases", db_names) rather than just fill the db_name var in the env.py file fixed the problem. Thanks again! 2018-08-10 17:16 GMT+02:00 Mike Bayer : > On Fri, Aug 10, 2018 at 6:47 AM, wrote: > > Hello > > > > I'm trying to use alembic to generate a migration file in a multi-db > > environment. I first created the project using `alembic init --template > > multidb alembic` > > and then hack the `env.py` script (didn't touch to > `run_migration_online`) > > to suit my needs. > > > > Here is the error I got after invoking `alembic --raiseerr revision > > --autogenerate -m 'First revision`: > > have you also received the alembic.ini from that run, or was there a > previous alembic.ini present that prevented the new one from being > genreated? the alembic.ini for multidb requires a "databases" > configuration: > > databases = engine1, engine2 > > [engine1] > sqlalchemy.url = driver://user:pass@localhost/dbname > > [engine2] > sqlalchemy.url = driver://user:pass@localhost/dbname2 > > > I can reproduce your error if that section is missing. Restore it, > and also put valid URLs in there, and then it works.If this is not > how you are configuring, then you need to alter the env.py to locate > your database URLs somehow. > > > > > > > > > [...] > > Generating > > /home/rdebroiz/Quantivly/services/alembic/versions/ > 201808-10-T12-30-48-first_revision-cb8c6da27574.py > > ... FAILED > > Traceback (most recent call last): > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/util/pyfiles.py", > > line 15, in template_to_file > > output = template.render_unicode(**kw).encode(output_encoding) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/mako/template.py", > > line 471, in render_unicode > > as_unicode=True) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/mako/runtime.py", > > line 838, in _render > > **_kwargs_for_callable(callable_, data)) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/mako/runtime.py", > > line 873, in _render_context > > _exec_template(inherit, lclcontext, args=args, kwargs=kwargs) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/mako/runtime.py", > > line 899, in _exec_template > > callable_(context, *args, **kwargs) > > File "alembic_script_py_mako", line 62, in render_body > > File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/re.py", line > 212, > > in split > > return _compile(pattern, flags).split(string, maxsplit) > > TypeError: expected string or bytes-like object > > > > During handling of the above exception, another exception occurred: > > > > Traceback (most recent call last): > > File "/home/rdebroiz/.virtualenvs/quantivly/bin/alembic", line 11, in > > > > sys.exit(main()) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/config.py", > > line 486, in main > > CommandLine(prog=prog).main(argv=argv) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/config.py", > > line 480, in main > > self.run_cmd(cfg, options) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/config.py", > > line 463, in run_cmd > > **dict((k, getattr(options, k, None)) for k in kwarg) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/command.py", > > line 180, in revision > > revision_context.generate_scripts() > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/command.py", > > line 179, in > > script for script in > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/autogenerate/api.py", > > line 480, in generate_scripts > > yield self._to_script(generated_revision) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/autogenerate/api.py", > > line 412, in _to_script > > **template_args) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/script/base.py", > > line 574, in generate_revision > > **kw > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/script/base.py", > > line 439, in _generate_template > > **kw > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/util/messaging.py", > > line 47, in status > > ret = fn(*arg, **kw) > > File > > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site- > packages/alembic/util/pyfiles.py", > > line 24, in template_to_file > > "template-oriented traceback." % fname) > > alembic.util.exc.CommandError: Template rendering failed; see > > /tmp/tmph4dvwm5j.txt for a
Re: autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`
On Fri, Aug 10, 2018 at 6:47 AM, wrote: > Hello > > I'm trying to use alembic to generate a migration file in a multi-db > environment. I first created the project using `alembic init --template > multidb alembic` > and then hack the `env.py` script (didn't touch to `run_migration_online`) > to suit my needs. > > Here is the error I got after invoking `alembic --raiseerr revision > --autogenerate -m 'First revision`: have you also received the alembic.ini from that run, or was there a previous alembic.ini present that prevented the new one from being genreated? the alembic.ini for multidb requires a "databases" configuration: databases = engine1, engine2 [engine1] sqlalchemy.url = driver://user:pass@localhost/dbname [engine2] sqlalchemy.url = driver://user:pass@localhost/dbname2 I can reproduce your error if that section is missing. Restore it, and also put valid URLs in there, and then it works.If this is not how you are configuring, then you need to alter the env.py to locate your database URLs somehow. > > [...] > Generating > /home/rdebroiz/Quantivly/services/alembic/versions/201808-10-T12-30-48-first_revision-cb8c6da27574.py > ... FAILED > Traceback (most recent call last): > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py", > line 15, in template_to_file > output = template.render_unicode(**kw).encode(output_encoding) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/template.py", > line 471, in render_unicode > as_unicode=True) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", > line 838, in _render > **_kwargs_for_callable(callable_, data)) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", > line 873, in _render_context > _exec_template(inherit, lclcontext, args=args, kwargs=kwargs) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", > line 899, in _exec_template > callable_(context, *args, **kwargs) > File "alembic_script_py_mako", line 62, in render_body > File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/re.py", line 212, > in split > return _compile(pattern, flags).split(string, maxsplit) > TypeError: expected string or bytes-like object > > During handling of the above exception, another exception occurred: > > Traceback (most recent call last): > File "/home/rdebroiz/.virtualenvs/quantivly/bin/alembic", line 11, in > > sys.exit(main()) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", > line 486, in main > CommandLine(prog=prog).main(argv=argv) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", > line 480, in main > self.run_cmd(cfg, options) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", > line 463, in run_cmd > **dict((k, getattr(options, k, None)) for k in kwarg) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py", > line 180, in revision > revision_context.generate_scripts() > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py", > line 179, in > script for script in > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py", > line 480, in generate_scripts > yield self._to_script(generated_revision) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py", > line 412, in _to_script > **template_args) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py", > line 574, in generate_revision > **kw > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py", > line 439, in _generate_template > **kw > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/messaging.py", > line 47, in status > ret = fn(*arg, **kw) > File > "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py", > line 24, in template_to_file > "template-oriented traceback." % fname) > alembic.util.exc.CommandError: Template rendering failed; see > /tmp/tmph4dvwm5j.txt for a template-oriented traceback. > > > I kept the original `script.py.mako` template: > > <%! > import re > > %>"""${message} > > Revision ID: ${up_revision} > Revises: ${down_revision | comma,n} > Create Date: ${create_date} > > """ > from alembic import op > import sqlalchemy as sa > ${imports if imports else ""} > > # revision identifiers, used by Alembic. > revision = ${repr(up_revision)} > down_revision = ${repr(down_revision)} > branch_labels = ${repr(branch_labels)} > depends_on = ${repr(depends_on)} > > > def upgrade(engine_name): > globals()["upgrade_%s" % engine_name]() > > > def downgrade(engine_name): > globals()["downgrade_%s" % engine_name]() >
autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`
Hello I'm trying to use alembic to generate a migration file in a multi-db environment. I first created the project using *`alembic init --template multidb alembic`* and then hack the `env.py` script *(didn't touch to `run_migration_online`)* to suit my needs. Here is the error I got after invoking *`alembic --raiseerr revision --autogenerate -m 'First revision`*: [...] Generating /home/rdebroiz/Quantivly/services/alembic/versions/201808-10-T12- 30-48-first_revision-cb8c6da27574.py ... FAILED Traceback (most recent call last): File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 15, in template_to_file output = template.render_unicode(**kw).encode(output_encoding) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/template.py", line 471, in render_unicode as_unicode=True) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", line 838, in _render **_kwargs_for_callable(callable_, data)) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", line 873, in _render_context _exec_template(inherit, lclcontext, args=args, kwargs=kwargs) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py", line 899, in _exec_template callable_(context, *args, **kwargs) File "alembic_script_py_mako", line 62, in render_body File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/re.py", line 212, in split return _compile(pattern, flags).split(string, maxsplit) TypeError: expected string or bytes-like object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/rdebroiz/.virtualenvs/quantivly/bin/alembic", line 11, in < module> sys.exit(main()) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", line 486, in main CommandLine(prog=prog).main(argv=argv) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", line 480, in main self.run_cmd(cfg, options) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py", line 463, in run_cmd **dict((k, getattr(options, k, None)) for k in kwarg) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py", line 180, in revision revision_context.generate_scripts() File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py", line 179, in script for script in File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py", line 480, in generate_scripts yield self._to_script(generated_revision) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py", line 412, in _to_script **template_args) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py", line 574, in generate_revision **kw File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py", line 439, in _generate_template **kw File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/messaging.py", line 47, in status ret = fn(*arg, **kw) File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 24, in template_to_file "template-oriented traceback." % fname) alembic.util.exc.CommandError: Template rendering failed; see /tmp/tmph4dvwm5j.txt for a template-oriented traceback. I kept the original `script.py.mako` template: <%! import re %>"""${message} Revision ID: ${up_revision} Revises: ${down_revision | comma,n} Create Date: ${create_date} """ from alembic import op import sqlalchemy as sa ${imports if imports else ""} # revision identifiers, used by Alembic. revision = ${repr(up_revision)} down_revision = ${repr(down_revision)} branch_labels = ${repr(branch_labels)} depends_on = ${repr(depends_on)} def upgrade(engine_name): globals()["upgrade_%s" % engine_name]() def downgrade(engine_name): globals()["downgrade_%s" % engine_name]() <% db_names = config.get_main_option("databases") %> ## generate an "upgrade_() / downgrade_()" function ## for each database name in the ini file. % for db_name in re.split(r',\s*', db_names): def upgrade_${db_name}(): ${context.get("%s_upgrades" % db_name, "pass")} def downgrade_${db_name}(): ${context.get("%s_downgrades" % db_name, "pass")} % endfor I tested it with alembic provided by PyPi and the bitbucket master. Any help would be greatly appreciate. Thanks! RP. -- 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 sqlalchemy-alembic+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.