Very glad to hear it, thanks. Autogenerate improvements would be welcome
indeed.

-----Original Message-----
From: sqlalchemy@googlegroups.com [mailto:sqlalchemy@googlegroups.com] On
Behalf Of Michael Bayer
Sent: Saturday, July 20, 2013 1:00 AM
To: sqlalchemy@googlegroups.com; sqlalchemy-alem...@googlegroups.com
Subject: [sqlalchemy] Alembic 0.6.0 released

Hey gang - 

Alembic 0.6.0 has been sitting in the hopper for awhile so I figured I'd put
it out.     The two changes here I'm most excited about are no longer
needing 2to3 for Python 3, and also I've made the display of "history" much
nicer, since I used that a lot and I needed something easier to read - it
also allows for ranges now too.

There's some other nifty changes that have more potential than they might
initially seem to, including that you can now add any number of custom
arguments to any command using the new "-x" option, and then parsing for
them in your env.py using get_x_argument(), and there's also a new feature
that allows you to limit autogenerate at the column level, in addition to
the table and schema level as before.

There's a bunch of issues that have piled up in Alembic, the vast majorty
concern autogenerate, and there's another thread that refers to how
Alembic's versioning model works.  There are some "big" ideas in place to
rework both of these systems in a fairly dramatic way.    

For autogenerate, the idea is that we would in most cases not rely upon
database reflection anymore, instead we will try to compare schemas based on
different versions of the code directly.  This would require that the
current state of the incoming MetaData() is written out to some serialized
format, which I'm thinking might be nice as JSON - though it can start as
pickle.    Creating a MetaData->JSON serializer/deserializer would be great
but also a very big job.   The advantage to comparing Python-generated
metadata objects is that we are guaranteed to catch all changes in the
schema perfectly, defaults, types, arguments on types, all of it, without
any reliance on the quirks of database reflection - since the purpose of
autogenerate is really just to detect what Tables/Columns have been added,
removed or changed in the code, versus what the code was before.   Decisions
have to be made here as to what role reflection will continue to play, what
the upgrade path will be for existing deployments, does the behavior kick in
automatically or does it require some configuration, etc.   

The other change to the versioning model is just as dramatic and involves
reworking the versioning to work based on an open-ended dependency graph,
meaning any particular revision is dependent on zero or more previous
revisions, rather than all revisions being lined up in a straight line.
The upgrade process would then find itself at a certain target by navigating
the topological sort of this dependency graph, pretty much the same idea as
how SQLAlchemy's unit of work functions.   With this model, the issue of
merging branches mostly goes away, as two unrelated migrations from
different branches can both be pulled in and just be siblings of each other
without issue.

Neither of these two changes are something I personally need in any urgent
way - I generally treat database migrations as a mostly manual process in
any case and I'm happy to edit the mistakes in my autogenerate migrations by
hand and to deal with the very occasional merge manually.    I do get a lot
of complaints about the many edge cases present in autogenerate at least so
at some point it would be nice to get to this issue.

Anyway, 0.6.0 is ready to go, happy downloading:

https://pypi.python.org/pypi/alembic

https://alembic.readthedocs.org/en/latest/changelog.html#change-0.6.0


-- 
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to