I noticed a significant performance increase between 0.5.2 and 0.5.3.
While tracking down an unrelated issue I had written a dummy test that 
ran some SA code inside of a  "for i in range(1000):"
and going from 0.5.2 and 0.5.3 execution went from 14minutes to 12minutes.

Keep in mind this was a very unscientific measurement, but still awesome.


Michael Bayer wrote:
> I've been a little busy lately so we're a month off on this one, but  
> there's a trove of bugfixes in this one, largely related to new  
> features that are specific to the 0.5 series, as well as some  
> behavioral enhancements to Query and declarative - read the changelog  
> for details.  I'm hammering on this release quite fiercely for a real  
> project right now (which has driven a good chunk of the fixes) so it  
> has my seal of approval.
>
> Download SQLAlchemy 0.5.3 at:  http://www.sqlalchemy.org/download.html .
>
> 0.5.3
> =====
> - orm
>      - The "objects" argument to session.flush() is deprecated.
>        State which represents the linkage between a parent and
>        child object does not support "flushed" status on
>        one side of the link and not the other, so supporting
>        this operation leads to misleading results.
>        [ticket:1315]
>
>      - Query now implements __clause_element__() which produces
>        its selectable, which means a Query instance can be accepted
>        in many SQL expressions, including col.in_(query),
>        union(query1, query2), select([foo]).select_from(query),
>        etc.
>
>      - Query.join() can now construct multiple FROM clauses, if
>        needed.  Such as, query(A, B).join(A.x).join(B.y)
>        might say SELECT A.*, B.* FROM A JOIN X, B JOIN Y.
>        Eager loading can also tack its joins onto those
>        multiple FROM clauses.  [ticket:1337]
>
>      - Fixed bug in dynamic_loader() where append/remove events
>        after construction time were not being propagated to the
>        UOW to pick up on flush(). [ticket:1347]
>
>      - Fixed bug where column_prefix wasn't being checked before
>        not mapping an attribute that already had class-level
>        name present.
>
>      - a session.expire() on a particular collection attribute
>        will clear any pending backref additions as well, so that
>        the next access correctly returns only what was present
>        in the database.  Presents some degree of a workaround for
>        [ticket:1315], although we are considering removing the
>        flush([objects]) feature altogether.
>
>      - Session.scalar() now converts raw SQL strings to text()
>        the same way Session.execute() does and accepts same
>        alternative **kw args.
>
>      - improvements to the "determine direction" logic of
>        relation() such that the direction of tricky situations
>        like mapper(A.join(B)) -> relation-> mapper(B) can be
>        determined.
>
>      - When flushing partial sets of objects using  
> session.flush([somelist]),
>        pending objects which remain pending after the operation won't
>        inadvertently be added as persistent. [ticket:1306]
>
>      - Added "post_configure_attribute" method to  
> InstrumentationManager,
>        so that the "listen_for_events.py" example works again.
>        [ticket:1314]
>
>      - a forward and complementing backwards reference which are both
>        of the same direction, i.e. ONETOMANY or MANYTOONE,
>        is now detected, and an error message is raised.
>        Saves crazy CircularDependencyErrors later on.
>
>      - Fixed bugs in Query regarding simultaneous selection of
>        multiple joined-table inheritance entities with common base
>        classes:
>
>        - previously the adaption applied to "B" on
>          "A JOIN B" would be erroneously partially applied
>          to "A".
>
>        - comparisons on relations (i.e. A.related==someb)
>          were not getting adapted when they should.
>
>        - Other filterings, like
>          query(A).join(A.bs).filter(B.foo=='bar'), were erroneously
>          adapting "B.foo" as though it were an "A".
>
>       - Fixed adaptation of EXISTS clauses via any(), has(), etc.
>         in conjunction with an aliased object on the left and
>         of_type() on the right.  [ticket:1325]
>
>       - Added an attribute helper method ``set_committed_value`` in
>         sqlalchemy.orm.attributes.  Given an object, attribute name,
>         and value, will set the value on the object as part of its
>         "committed" state, i.e. state that is understood to have
>         been loaded from the database.   Helps with the creation of
>         homegrown collection loaders and such.
>
>       - Query won't fail with weakref error when a non-mapper/class
>         instrumented descriptor is passed, raises
>         "Invalid column expession".
>
>       - Query.group_by() properly takes into account aliasing applied
>         to the FROM clause, such as with select_from(), using
>         with_polymorphic(), or using from_self().
>
> - sql
>      - An alias() of a select() will convert to a "scalar subquery"
>        when used in an unambiguously scalar context, i.e. it's used
>        in a comparison operation.  This applies to
>        the ORM when using query.subquery() as well.
>
>      - Fixed missing _label attribute on Function object, others
>        when used in a select() with use_labels (such as when used
>        in an ORM column_property()).  [ticket:1302]
>
>      - anonymous alias names now truncate down to the max length
>        allowed by the dialect.  More significant on DBs like
>        Oracle with very small character limits. [ticket:1309]
>
>      - the __selectable__() interface has been replaced entirely
>        by __clause_element__().
>
>      - The per-dialect cache used by TypeEngine to cache
>        dialect-specific types is now a WeakKeyDictionary.
>        This to prevent dialect objects from
>        being referenced forever for an application that
>        creates an arbitrarily large number of engines
>        or dialects.   There is a small performance penalty
>        which will be resolved in 0.6.  [ticket:1299]
>
> - sqlite
>      - Fixed SQLite reflection methods so that non-present
>        cursor.description, which triggers an auto-cursor
>        close, will be detected so that no results doesn't
>        fail on recent versions of pysqlite which raise
>        an error when fetchone() called with no rows present.
>
> - postgres
>      - Index reflection won't fail when an index with
>        multiple expressions is encountered.
>
>      - Added PGUuid and PGBit types to
>        sqlalchemy.databases.postgres. [ticket:1327]
>
>      - Refection of unknown PG types won't crash when those
>        types are specified within a domain.  [ticket:1327]
>
> - mssql
>      - Preliminary support for pymssql 1.0.1
>
>      - Corrected issue on mssql where max_identifier_length was
>        not being respected.
>
> - extensions
>
>      - Fixed a recursive pickling issue in serializer, triggered
>        by an EXISTS or other embedded FROM construct.
>
>      - Declarative locates the "inherits" class using a search
>        through __bases__, to skip over mixins that are local
>        to subclasses.
>
>      - Declarative figures out joined-table inheritance primary join
>        condition even if "inherits" mapper argument is given
>        explicitly.
>
>      - Declarative will properly interpret the "foreign_keys" argument
>        on a backref() if it's a string.
>
>      - Declarative will accept a table-bound column as a property
>        when used in conjunction with __table__, if the column is already
>        present in __table__.  The column will be remapped to the given
>        key the same way as when added to the mapper() properties dict.
>
>
> >
>
>   


-- 
David Gardner
Pipeline Tools Programmer, "Sid the Science Kid"
Jim Henson Creature Shop
dgard...@creatureshop.com



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

Reply via email to