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 <mike...@zzzcomputing.com>:

> On Fri, Aug 10, 2018 at 6:47 AM,  <rdebr...@gmail.com> 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
> > <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 <listcomp>
> > 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_<xyz>() / downgrade_<xyz>()" 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.
>
> --
> 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.
>

-- 
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.

Reply via email to