On Sun, Apr 29, 2012 at 11:13 PM, Michael Bayer <mike...@zzzcomputing.com> wrote: > > On Apr 29, 2012, at 10:56 AM, limodou wrote: > >> On Sun, Apr 29, 2012 at 10:42 PM, Michael Bayer >> <mike...@zzzcomputing.com> wrote: >>> You would assemble a multi-database scheme of your choosing in env.py. If >>> you do "alembic init multidb" you'll see an example of one. How env.py >>> is organized depends greatly on the relationship of the databases to each >>> other, that is, to what degree they are mirrors of each other versus >>> storing different schemas. >>> >> >> If I ran the command: >> >> alembic init multidb >> >> It'll create multidb folder and copy files in it. But I saw the >> alembic.ini will be the same one. So if I should change it myself? And >> how to let alembic know different database when executing commands >> like: revision, upgrade, etc. It seems that no database parameter >> existed. >> >> And if I can manage different databases in one directory or in one ini file? > > multidb has a different alembic.ini as an example. If you already had an > alembic.ini there it wouldn't overwrite it. > > if you really wanted two completely independent sets of migration scripts, > then you'd run two migration environments. > > They can share the same alembic.ini like this: > > [my_db_one] > sqlalchemy.url = > > [my_db_two] > sqlalchemy.url = > > you then run alembic with "alembic -n my_db_one" or "alembic -n my_db_two". > The "default" config area is set by -n. > > A single env.py script can get multiple database URLs in any way it wants, as > it determines how config is accessed. If you look in the multidb/env.py > script, you'll see it's pulling multiple database urls from one section using > config.get_section(name) - config file: > > [alembic] > # path to migration scripts > script_location = ${script_location} > > # template used to generate migration files > # file_template = %%(rev)s_%%(slug)s > > databases = engine1, engine2 > > [engine1] > sqlalchemy.url = driver://user:pass@localhost/dbname > > [engine2] > sqlalchemy.url = driver://user:pass@localhost/dbname2 > > usage: > > config = context.config > > db_names = config.get_main_option('databases') > > for name in re.split(r',\s*', db_names): > engines[name] = rec = {} > rec['engine'] = engine_from_config( > config.get_section(name), > prefix='sqlalchemy.', > poolclass=pool.NullPool) > > Over here I have both forms of multi db at the same time. There's two > migration environments, and one migration environment does two databases that > are largely mirrored, so three databases total. All three make use of a > common env.py script that's in my application as a library, they then > implement an env.py in the migration environment that draws upon the > myapp/lib/env.py script for common features. > > You can pass instructions to a single env.py that may be controlling multiple > databases using --tag: > > "alembic --tag my_tag" > > "my_tag" is available in env.py as context.get_tag_argument(). You can use > that to conditionally run migrations on one database or the other. > > This is all DIY. Multi-database migrations can happen in many different ways > so you'd need to build the approach that suits your situation best. > >
thank you very much. -- I like python! UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/ UliWeb <<simple web framework>>: http://code.google.com/p/uliweb/ My Blog: http://hi.baidu.com/limodou -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.