Francesca Leon wrote:
>
> Hi Michael
>
> I just downloaded version 0.5.4 of SqlAlchemy.
> I would like to signal just a small detail that seems to make my tests
> fail:
>
> [...]
> File
> "C:\Python25\lib\site-packages\sqlalchemy-0.5.4-py2.5.egg\sqlalchemy\orm\attributes.py",
> line 379, in get
>     return self.get(state, passive=passive)
> TypeError: get() takes at least 3 non-keyword arguments (2 given)
>
> Thank you for all your great work!

thats an internal API that has changed.  What are you doing to trigger it ?




> Francesca
>
>
> Michael Bayer wrote:
>> Hello list -
>>
>> SQLAlchemy 0.5.4 is released, and this release is *highly* recommended
>> for all users.    For an indication of how high, lets just say, higher
>> than 0.5.3, 0.5.2, and 0.5.1combined.
>>
>> Not to worry, there are no security holes or memory leaks in previous
>> versions.   But we have neutralized some major, major speed bumps in
>> the flush() process, as well as made significant improvements to
>> memory usage.     Due to the removal of these bugs, large dataset
>> scenarios that were more or less impossible to work with for any
>> version of SQLAlchemy now run at top speed with the same rate
>> performance regardless of how large the Session grows.    Other
>> performance issues that were proportional to the number of
>> interconnected mapped classes, memory/speed issues related to the
>> number of relation()s set up on mappers during a load, or just
>> wasteful overhead during the flush have been mitigated.   The
>> improvements are of a magnitude such that some applications that had
>> abaondoned the ORM due to latency related to large sets of objects may
>> be able to come back to it and regain all its advantages.
>>
>> The key to all these improvements is, that i finally have a job using
>> SQLAlchemy full time where I've gotten the opportunity to use the ORM
>> with somewhat large amounts of data.   None of these issues were very
>> deep and just required that I spend some more time with the profiler
>> and bigger datasets.    My own use case here is a 6500 row spreadsheet
>> of interconnected objects, representing about 25K rows - the process
>> of ingesting that data, which requires that all of the objects need to
>> stay present in the session, has gone from 33 minutes to 8.     The
>> key is that the number of method calls to flush X number of objects is
>> now the same for a session regardless of how many other non-dirty
>> items are present.   Similarly, a mapping setup that has 30 mappers
>> configured will not be slowed down by unnecessary traversal of all the
>> mapper relations.
>>
>> The Session itself, which has for some time now has been "weak
>> referencing" with regards to its contents, has been repaired such that
>> the weak referencing behavior is now fully operational.  Previously,
>> objects which were related via mutual backrefs would not get cleared
>> from the session when all external references were lost until you
>> expunged them.     That is no longer necessary - the Session now has
>> no strong references whatsoever to its contents, as long as no changes
>> are pending on those objects.   Pending changes as always are strongly
>> referenced until flushed.   So now you can iterate through as many
>> tens of thousands of objects as you like (keeping in mind an
>> individual Query still loads each individual result fully in unless
>> yield_per is enabled) and there's no need to expunge the session in
>> between chunks.
>>
>> The loading of objects has also been sped up and reduced in memory
>> overhead by killing a wasteful structure of callables that was
>> generated on a per-relation()/per-object basis whenever
>> query.options() was used.
>>
>> In other news I've backported a convenient extension from the 0.6
>> series which allows you to create custom SQL expression elements with
>> compiler functions.   This is the "compiler" extension and is
>> described in the documentation.
>>
>> Download SQLAlchemy 0.5.4 (right now !!  get rid of whatever buggy old
>> version you're using) at:
>>
>> http://www.sqlalchemy.org/download.html
>>
>>
>> 0.5.4
>> =====
>>
>> - orm
>>      - Significant performance enhancements regarding Sessions/flush()
>>        in conjunction with large mapper graphs, large numbers of
>>        objects:
>>
>>        - Removed all* O(N) scanning behavior from the flush() process,
>>          i.e. operations that were scanning the full session,
>>          including an extremely expensive one that was erroneously
>>          assuming primary key values were changing when this
>>          was not the case.
>>
>>          * one edge case remains which may invoke a full scan,
>>            if an existing primary key attribute is modified
>>            to a new value.
>>
>>        - The Session's "weak referencing" behavior is now *full* -
>>          no strong references whatsoever are made to a mapped object
>>          or related items/collections in its __dict__.  Backrefs and
>>          other cycles in objects no longer affect the Session's ability
>>          to lose all references to unmodified objects.  Objects with
>>          pending changes still are maintained strongly until flush.
>>          [ticket:1398]
>>
>>          The implementation also improves performance by moving
>>          the "resurrection" process of garbage collected items
>>          to only be relevant for mappings that map "mutable"
>>          attributes (i.e. PickleType, composite attrs).  This removes
>>          overhead from the gc process and simplifies internal
>>          behavior.
>>
>>          If a "mutable" attribute change is the sole change on an object
>>          which is then dereferenced, the mapper will not have access to
>>          other attribute state when the UPDATE is issued.  This may
>> present
>>          itself differently to some MapperExtensions.
>>
>>          The change also affects the internal attribute API, but not
>>          the AttributeExtension interface nor any of the publically
>>          documented attribute functions.
>>
>>        - The unit of work no longer genererates a graph of "dependency"
>>          processors for the full graph of mappers during flush(),
>> instead
>>          creating such processors only for those mappers which represent
>>          objects with pending changes.  This saves a tremendous number
>>          of method calls in the context of a large interconnected
>>          graph of mappers.
>>
>>        - Cached a wasteful "table sort" operation that previously
>>          occured multiple times per flush, also removing significant
>>          method call count from flush().
>>
>>        - Other redundant behaviors have been simplified in
>>          mapper._save_obj().
>>
>>      - Modified query_cls on DynamicAttributeImpl to accept a full
>>        mixin version of the AppenderQuery, which allows subclassing
>>        the AppenderMixin.
>>
>>      - The "polymorphic discriminator" column may be part of a
>>        primary key, and it will be populated with the correct
>>        discriminator value.  [ticket:1300]
>>
>>      - Fixed the evaluator not being able to evaluate IS NULL clauses.
>>
>>      - Fixed the "set collection" function on "dynamic" relations to
>>        initiate events correctly.  Previously a collection could only
>>        be assigned to a pending parent instance, otherwise modified
>>        events would not be fired correctly.  Set collection is now
>>        compatible with merge(), fixes [ticket:1352].
>>
>>      - Allowed pickling of PropertyOption objects constructed with
>>        instrumented descriptors; previously, pickle errors would occur
>>        when pickling an object which was loaded with a descriptor-based
>>        option, such as query.options(eagerload(MyClass.foo)).
>>
>>      - Lazy loader will not use get() if the "lazy load" SQL clause
>>        matches the clause used by get(), but contains some parameters
>>        hardcoded.  Previously the lazy strategy would fail with the
>>        get().  Ideally get() would be used with the hardcoded
>>        parameters but this would require further development.
>>        [ticket:1357]
>>
>>      - MapperOptions and other state associated with query.options()
>>        is no longer bundled within callables associated with each
>>        lazy/deferred-loading attribute during a load.
>>        The options are now associated with the instance's
>>        state object just once when it's populated.  This removes
>>        the need in most cases for per-instance/attribute loader
>>        objects, improving load speed and memory overhead for
>>        individual instances. [ticket:1391]
>>
>>      - Fixed another location where autoflush was interfering
>>        with session.merge().  autoflush is disabled completely
>>        for the duration of merge() now. [ticket:1360]
>>
>>      - Fixed bug which prevented "mutable primary key" dependency
>>        logic from functioning properly on a one-to-one
>>        relation().  [ticket:1406]
>>
>>      - Fixed bug in relation(), introduced in 0.5.3,
>>        whereby a self referential relation
>>        from a base class to a joined-table subclass would
>>        not configure correctly.
>>
>>      - Fixed obscure mapper compilation issue when inheriting
>>        mappers are used which would result in un-initialized
>>        attributes.
>>
>>      - Fixed documentation for session weak_identity_map -
>>        the default value is True, indicating a weak
>>        referencing map in use.
>>
>>      - Fixed a unit of work issue whereby the foreign
>>        key attribute on an item contained within a collection
>>        owned by an object being deleted would not be set to
>>        None if the relation() was self-referential. [ticket:1376]
>>
>>      - Fixed Query.update() and Query.delete() failures with eagerloaded
>>        relations. [ticket:1378]
>>
>>      - It is now an error to specify both columns of a binary
>> primaryjoin
>>        condition in the foreign_keys or remote_side collection.  Whereas
>>        previously it was just nonsensical, but would succeed in a
>>        non-deterministic way.
>>
>> - schema
>>      - Added a quote_schema() method to the IdentifierPreparer class
>>        so that dialects can override how schemas get handled. This
>>        enables the MSSQL dialect to treat schemas as multipart
>>        identifiers, such as 'database.owner'. [ticket: 594, 1341]
>>
>> - sql
>>      - Back-ported the "compiler" extension from SQLA 0.6.  This
>>        is a standardized interface which allows the creation of custom
>>        ClauseElement subclasses and compilers.  In particular it's
>>        handy as an alternative to text() when you'd like to
>>        build a construct that has database-specific compilations.
>>        See the extension docs for details.
>>
>>      - Exception messages are truncated when the list of bound
>>        parameters is larger than 10, preventing enormous
>>        multi-page exceptions from filling up screens and logfiles
>>        for large executemany() statements. [ticket:1413]
>>
>>      - ``sqlalchemy.extract()`` is now dialect sensitive and can
>>        extract components of timestamps idiomatically across the
>>        supported databases, including SQLite.
>>
>>      - Fixed __repr__() and other _get_colspec() methods on
>>        ForeignKey constructed from __clause_element__() style
>>        construct (i.e. declarative columns).  [ticket:1353]
>>
>> - mysql
>>      - Reflecting a FOREIGN KEY construct will take into account
>>        a dotted schema.tablename combination, if the foreign key
>>        references a table in a remote schema. [ticket:1405]
>>
>> - mssql
>>      - Modified how savepoint logic works to prevent it from
>>        stepping on non-savepoint oriented routines. Savepoint
>>        support is still very experimental.
>>
>>      - Added in reserved words for MSSQL that covers version 2008
>>        and all prior versions. [ticket:1310]
>>
>>      - Corrected problem with information schema not working with a
>>        binary collation based database. Cleaned up information schema
>>        since it is only used by mssql now. [ticket:1343]
>>
>> - sqlite
>>      - Corrected the SLBoolean type so that it properly treats only 1
>>        as True. [ticket:1402]
>>
>>      - Corrected the float type so that it correctly maps to a
>>        SLFloat type when being reflected. [ticket:1273]
>>
>> - extensions
>>
>>      - Fixed adding of deferred or other column properties to a
>>        declarative class. [ticket:1379]
>>
>>      - Added "compiler" extension from 0.6
>>
>> >
>>
>>
>
>
> >
>


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