Sqlalchemy

Latest version: v2.0.36

Safety actively analyzes 683249 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 40 of 51

0.6.6

Not secure
:released: Sat Jan 08 2011

.. change::
:tags: orm
:tickets:

Fixed bug whereby a non-"mutable" attribute modified event
which occurred on an object that was clean except for
preceding mutable attribute changes would fail to strongly
reference itself in the identity map. This would cause the
object to be garbage collected, losing track of any changes
that weren't previously saved in the "mutable changes"
dictionary.

.. change::
:tags: orm
:tickets: 2013

Fixed bug whereby "passive_deletes='all'" wasn't passing
the correct symbols to lazy loaders during flush, thereby
causing an unwarranted load.

.. change::
:tags: orm
:tickets: 1997

Fixed bug which prevented composite mapped
attributes from being used on a mapped select statement.. Note the workings of composite are slated to
change significantly in 0.7.

.. change::
:tags: orm
:tickets: 1976

active_history flag also added to composite().
The flag has no effect in 0.6, but is instead
a placeholder flag for forwards compatibility,
as it applies in 0.7 for composites.

.. change::
:tags: orm
:tickets: 2002

Fixed uow bug whereby expired objects passed to
Session.delete() would not have unloaded references
or collections taken into account when deleting
objects, despite passive_deletes remaining at
its default of False.

.. change::
:tags: orm
:tickets: 1987

A warning is emitted when version_id_col is specified
on an inheriting mapper when the inherited mapper
already has one, if those column expressions are not
the same.

.. change::
:tags: orm
:tickets: 1954

"innerjoin" flag doesn't take effect along the chain
of joinedload() joins if a previous join in that chain
is an outer join, thus allowing primary rows without
a referenced child row to be correctly returned
in results.

.. change::
:tags: orm
:tickets: 1964

Fixed bug regarding "subqueryload" strategy whereby
strategy would fail if the entity was an aliased()
construct.

.. change::
:tags: orm
:tickets: 2014

Fixed bug regarding "subqueryload" strategy whereby
the join would fail if using a multi-level load
of the form from A->joined-subclass->C

.. change::
:tags: orm
:tickets: 1968

Fixed indexing of Query objects by -1. It was erroneously
transformed to the empty slice -1:0 that resulted in
IndexError.

.. change::
:tags: orm
:tickets: 1971

The mapper argument "primary_key" can be passed as a
single column as well as a list or tuple.
The documentation examples that illustrated it as a
scalar value have been changed to lists.

.. change::
:tags: orm
:tickets: 1961

Added active_history flag to relationship()
and column_property(), forces attribute events to
always load the "old" value, so that it's available to
attributes.get_history().

.. change::
:tags: orm
:tickets: 1977

Query.get() will raise if the number of params
in a composite key is too large, as well as too
small.

.. change::
:tags: orm
:tickets: 1992

Backport of "optimized get" fix from 0.7,
improves the generation of joined-inheritance
"load expired row" behavior.

.. change::
:tags: orm
:tickets:

A little more verbiage to the "primaryjoin" error,
in an unusual condition that the join condition
"works" for viewonly but doesn't work for non-viewonly,
and foreign_keys wasn't used - adds "foreign_keys" to
the suggestion. Also add "foreign_keys" to the
suggestion for the generic "direction" error.

.. change::
:tags: sql
:tickets: 1984

Fixed operator precedence rules for multiple
chains of a single non-associative operator.
I.e. "x - (y - z)" will compile as "x - (y - z)"
and not "x - y - z". Also works with labels,
i.e. "x - (y - z).label('foo')"

.. change::
:tags: sql
:tickets: 1967

The 'info' attribute of Column is copied during
Column.copy(), i.e. as occurs when using columns
in declarative mixins.

.. change::
:tags: sql
:tickets:

Added a bind processor for booleans which coerces
to int, for DBAPIs such as pymssql that naively call
str() on values.

.. change::
:tags: sql
:tickets: 2000

CheckConstraint will copy its 'initially', 'deferrable',
and '_create_rule' attributes within a copy()/tometadata()

.. change::
:tags: engine
:tickets:

The "unicode warning" against non-unicode bind data
is now raised only when the
Unicode type is used explicitly; not when
convert_unicode=True is used on the engine
or String type.

.. change::
:tags: engine
:tickets: 1978

Fixed memory leak in C version of Decimal result
processor.

.. change::
:tags: engine
:tickets: 1871

Implemented sequence check capability for the C
version of RowProxy, as well as 2.7 style
"collections.Sequence" registration for RowProxy.

.. change::
:tags: engine
:tickets: 1998

Threadlocal engine methods rollback(), commit(),
prepare() won't raise if no transaction is in progress;
this was a regression introduced in 0.6.

.. change::
:tags: engine
:tickets: 2004

Threadlocal engine returns itself upon begin(),
begin_nested(); engine then implements contextmanager
methods to allow the "with" statement.

.. change::
:tags: postgresql
:tickets: 1984

Single element tuple expressions inside an IN clause
parenthesize correctly, also from

.. change::
:tags: postgresql
:tickets: 1955

Ensured every numeric, float, int code, scalar + array,
are recognized by psycopg2 and pg8000's "numeric"
base type.

.. change::
:tags: postgresql
:tickets: 1956

Added as_uuid=True flag to the UUID type, will receive
and return values as Python UUID() objects rather than
strings. Currently, the UUID type is only known to
work with psycopg2.

.. change::
:tags: postgresql
:tickets: 1989

Fixed bug whereby KeyError would occur with non-ENUM
supported PG versions after a pool dispose+recreate
would occur.

.. change::
:tags: mysql
:tickets: 1960

Fixed error handling for Jython + zxjdbc, such that
has_table() property works again. Regression from
0.6.3 (we don't have a Jython buildbot, sorry)

.. change::
:tags: sqlite
:tickets: 1851

The REFERENCES clause in a CREATE TABLE that includes
a remote schema to another table with the same schema
name now renders the remote name without
the schema clause, as required by SQLite.

.. change::
:tags: sqlite
:tickets:

On the same theme, the REFERENCES clause in a CREATE TABLE
that includes a remote schema to a *different* schema
than that of the parent table doesn't render at all,
as cross-schema references do not appear to be supported.

.. change::
:tags: mssql
:tickets: 1770

The rewrite of index reflection in was
unfortunately not tested correctly, and returned incorrect
results. This regression is now fixed.

.. change::
:tags: oracle
:tickets: 1953

The cx_oracle "decimal detection" logic, which takes place
for result set columns with ambiguous numeric characteristics,
now uses the decimal point character determined by the locale/
NLS_LANG setting, using an on-first-connect detection of
this character. cx_oracle 5.0.3 or greater is also required
when using a non-period-decimal-point NLS_LANG setting..

.. change::
:tags: firebird
:tickets: 2012

Firebird numeric type now checks for Decimal explicitly,
lets float() pass right through, thereby allowing
special values such as float('inf').

.. change::
:tags: declarative
:tickets: 1972

An error is raised if __table_args__ is not in tuple
or dict format, and is not None.

.. change::
:tags: sqlsoup
:tickets: 1975

Added "map_to()" method to SqlSoup, which is a "master"
method which accepts explicit arguments for each aspect of
the selectable and mapping, including a base class per
mapping.

.. change::
:tags: sqlsoup
:tickets:

Mapped selectables used with the map(), with_labels(),
join() methods no longer put the given argument into the
internal "cache" dictionary. Particularly since the
join() and select() objects are created in the method
itself this was pretty much a pure memory leaking behavior.

.. change::
:tags: examples
:tickets:

The versioning example now supports detection of changes
in an associated relationship().

.. changelog::

0.6.5

Not secure
:released: Sun Oct 24 2010

.. change::
:tags: orm
:tickets: 1914

Added a new "lazyload" option "immediateload".
Issues the usual "lazy" load operation automatically
as the object is populated. The use case
here is when loading objects to be placed in
an offline cache, or otherwise used after
the session isn't available, and straight 'select'
loading, not 'joined' or 'subquery', is desired.

.. change::
:tags: orm
:tickets: 1920

New Query methods: query.label(name), query.as_scalar(),
return the query's statement as a scalar subquery
with /without label;
query.with_entities(\*ent), replaces the SELECT list of
the query with new entities.
Roughly equivalent to a generative form of query.values()
which accepts mapped entities as well as column
expressions.

.. change::
:tags: orm
:tickets:

Fixed recursion bug which could occur when moving
an object from one reference to another, with
backrefs involved, where the initiating parent
was a subclass (with its own mapper) of the
previous parent.

.. change::
:tags: orm
:tickets: 1918

Fixed a regression in 0.6.4 which occurred if you
passed an empty list to "include_properties" on
mapper()

.. change::
:tags: orm
:tickets:

Fixed labeling bug in Query whereby the NamedTuple
would mis-apply labels if any of the column
expressions were un-labeled.

.. change::
:tags: orm
:tickets: 1925

Patched a case where query.join() would adapt the
right side to the right side of the left's join
inappropriately

.. change::
:tags: orm
:tickets:

Query.select_from() has been beefed up to help
ensure that a subsequent call to query.join()
will use the select_from() entity, assuming it's
a mapped entity and not a plain selectable,
as the default "left" side, not the first entity
in the Query object's list of entities.

.. change::
:tags: orm
:tickets:

The exception raised by Session when it is used
subsequent to a subtransaction rollback (which is what
happens when a flush fails in autocommit=False mode) has
now been reworded (this is the "inactive due to a
rollback in a subtransaction" message). In particular,
if the rollback was due to an exception during flush(),
the message states this is the case, and reiterates the
string form of the original exception that occurred
during flush. If the session is closed due to explicit
usage of subtransactions (not very common), the message
just states this is the case.

.. change::
:tags: orm
:tickets:

The exception raised by Mapper when repeated requests to
its initialization are made after initialization already
failed no longer assumes the "hasattr" case, since
there's other scenarios in which this message gets
emitted, and the message also does not compound onto
itself multiple times - you get the same message for
each attempt at usage. The misnomer "compiles" is being
traded out for "initialize".

.. change::
:tags: orm
:tickets: 1935

Fixed bug in query.update() where 'evaluate' or 'fetch'
expiration would fail if the column expression key was
a class attribute with a different keyname as the
actual column name.

.. change::
:tags: orm
:tickets:

Added an assertion during flush which ensures
that no NULL-holding identity keys were generated
on "newly persistent" objects.
This can occur when user defined code inadvertently
triggers flushes on not-fully-loaded objects.

.. change::
:tags: orm
:tickets: 1910

lazy loads for relationship attributes now use
the current state, not the "committed" state,
of foreign and primary key attributes
when issuing SQL, if a flush is not in process.
Previously, only the database-committed state would
be used. In particular, this would cause a many-to-one
get()-on-lazyload operation to fail, as autoflush
is not triggered on these loads when the attributes are
determined and the "committed" state may not be
available.

.. change::
:tags: orm
:tickets:

A new flag on relationship(), load_on_pending, allows
the lazy loader to fire off on pending objects without a
flush taking place, as well as a transient object that's
been manually "attached" to the session. Note that this
flag blocks attribute events from taking place when an
object is loaded, so backrefs aren't available until
after a flush. The flag is only intended for very
specific use cases.

.. change::
:tags: orm
:tickets:

Another new flag on relationship(), cascade_backrefs,
disables the "save-update" cascade when the event was
initiated on the "reverse" side of a bidirectional
relationship. This is a cleaner behavior so that
many-to-ones can be set on a transient object without
it getting sucked into the child object's session,
while still allowing the forward collection to
cascade. We *might* default this to False in 0.7.

.. change::
:tags: orm
:tickets:

Slight improvement to the behavior of
"passive_updates=False" when placed only on the
many-to-one side of a relationship; documentation has
been clarified that passive_updates=False should really
be on the one-to-many side.

.. change::
:tags: orm
:tickets:

Placing passive_deletes=True on a many-to-one emits
a warning, since you probably intended to put it on
the one-to-many side.

.. change::
:tags: orm
:tickets:

Fixed bug that would prevent "subqueryload" from
working correctly with single table inheritance
for a relationship from a subclass - the "where
type in (x, y, z)" only gets placed on the inside,
instead of repeatedly.

.. change::
:tags: orm
:tickets:

When using from_self() with single table inheritance,
the "where type in (x, y, z)" is placed on the outside
of the query only, instead of repeatedly. May make
some more adjustments to this.

.. change::
:tags: orm
:tickets: 1924

scoped_session emits a warning when configure() is
called if a Session is already present (checks only the
current thread)

.. change::
:tags: orm
:tickets: 1932

reworked the internals of mapper.cascade_iterator() to
cut down method calls by about 9% in some circumstances.

.. change::
:tags: sql
:tickets:

Fixed bug in TypeDecorator whereby the dialect-specific
type was getting pulled in to generate the DDL for a
given type, which didn't always return the correct result.

.. change::
:tags: sql
:tickets:

TypeDecorator can now have a fully constructed type
specified as its "impl", in addition to a type class.

.. change::
:tags: sql
:tickets:

TypeDecorator will now place itself as the resulting
type for a binary expression where the type coercion
rules would normally return its impl type - previously,
a copy of the impl type would be returned which would
have the TypeDecorator embedded into it as the "dialect"
impl, this was probably an unintentional way of achieving
the desired effect.

.. change::
:tags: sql
:tickets:

TypeDecorator.load_dialect_impl() returns "self.impl" by
default, i.e. not the dialect implementation type of
"self.impl". This to support compilation correctly.
Behavior can be user-overridden in exactly the same way
as before to the same effect.

.. change::
:tags: sql
:tickets:

Added type_coerce(expr, type\_) expression element.
Treats the given expression as the given type when evaluating
expressions and processing result rows, but does not
affect the generation of SQL, other than an anonymous
label.

.. change::
:tags: sql
:tickets:

Table.tometadata() now copies Index objects associated
with the Table as well.

.. change::
:tags: sql
:tickets:

Table.tometadata() issues a warning if the given Table
is already present in the target MetaData - the existing
Table object is returned.

.. change::
:tags: sql
:tickets:

An informative error message is raised if a Column
which has not yet been assigned a name, i.e. as in
declarative, is used in a context where it is
exported to the columns collection of an enclosing
select() construct, or if any construct involving
that column is compiled before its name is
assigned.

.. change::
:tags: sql
:tickets: 1862

as_scalar(), label() can be called on a selectable
which contains a Column that is not yet named.

.. change::
:tags: sql
:tickets: 1907

Fixed recursion overflow which could occur when operating
with two expressions both of type "NullType", but
not the singleton NULLTYPE instance.

.. change::
:tags: declarative
:tickets: 1922

classproperty (soon/now declared_attr) takes effect for
__mapper_args__, __table_args__, __tablename__ on
a base class that is not a mixin, as well as mixins.

.. change::
:tags: declarative
:tickets: 1915

classproperty 's official name/location for usage
with declarative is sqlalchemy.ext.declarative.declared_attr.
Same thing, but moving there since it is more of a
"marker" that's specific to declarative,
not just an attribute technique.

.. change::
:tags: declarative
:tickets: 1931, 1930

Fixed bug whereby columns on a mixin wouldn't propagate
correctly to a single-table, or joined-table,
inheritance scheme where the attribute name is
different than that of the column.,.

.. change::
:tags: declarative
:tickets:

A mixin can now specify a column that overrides
a column of the same name associated with a superclass.
Thanks to Oystein Haaland.

.. change::
:tags: engine
:tickets:

Fixed a regression in 0.6.4 whereby the change that
allowed cursor errors to be raised consistently broke
the result.lastrowid accessor. Test coverage has
been added for result.lastrowid. Note that lastrowid
is only supported by Pysqlite and some MySQL drivers,
so isn't super-useful in the general case.

.. change::
:tags: engine
:tickets:

the logging message emitted by the engine when
a connection is first used is now "BEGIN (implicit)"
to emphasize that DBAPI has no explicit begin().

.. change::
:tags: engine
:tickets: 1936

added "views=True" option to metadata.reflect(),
will add the list of available views to those
being reflected.

.. change::
:tags: engine
:tickets: 1899

engine_from_config() now accepts 'debug' for
'echo', 'echo_pool', 'force' for 'convert_unicode',
boolean values for 'use_native_unicode'.

.. change::
:tags: postgresql
:tickets:

Added "as_tuple" flag to ARRAY type, returns results
as tuples instead of lists to allow hashing.

.. change::
:tags: postgresql
:tickets: 1933

Fixed bug which prevented "domain" built from a
custom type such as "enum" from being reflected.

.. change::
:tags: mysql
:tickets: 1940

Fixed bug involving reflection of CURRENT_TIMESTAMP
default used with ON UPDATE clause, thanks to
Taavi Burns

.. change::
:tags: oracle
:tickets: 1878

The implicit_returning argument to create_engine()
is now honored regardless of detected version of
Oracle. Previously, the flag would be forced
to False if server version info was < 10.

.. change::
:tags: mssql
:tickets: 1946

Fixed reflection bug which did not properly handle
reflection of unknown types.

.. change::
:tags: mssql
:tickets: 1943

Fixed bug where aliasing of tables with "schema" would
fail to compile properly.

.. change::
:tags: mssql
:tickets: 1770

Rewrote the reflection of indexes to use sys.
catalogs, so that column names of any configuration
(spaces, embedded commas, etc.) can be reflected.
Note that reflection of indexes requires SQL
Server 2005 or greater.

.. change::
:tags: mssql
:tickets: 1952

mssql+pymssql dialect now honors the "port" portion
of the URL instead of discarding it.

.. change::
:tags: informix
:tickets: 1906

*Major* cleanup / modernization of the Informix
dialect for 0.6, courtesy Florian Apolloner.

.. change::
:tags: tests
:tickets:

the NoseSQLAlchemyPlugin has been moved to a
new package "sqlalchemy_nose" which installs
along with "sqlalchemy". This so that the "nosetests"
script works as always but also allows the
--with-coverage option to turn on coverage before
SQLAlchemy modules are imported, allowing coverage
to work correctly.

.. change::
:tags: misc
:tickets: 1890

CircularDependencyError now has .cycles and .edges
members, which are the set of elements involved in
one or more cycles, and the set of edges as 2-tuples.

.. changelog::

0.6.4

Not secure
:released: Tue Sep 07 2010

.. change::
:tags: orm
:tickets:

The name ConcurrentModificationError has been
changed to StaleDataError, and descriptive
error messages have been revised to reflect
exactly what the issue is. Both names will
remain available for the foreseeable future
for schemes that may be specifying
ConcurrentModificationError in an "except:"
clause.

.. change::
:tags: orm
:tickets: 1891

Added a mutex to the identity map which mutexes
remove operations against iteration methods,
which now pre-buffer before returning an
iterable. This because asynchronous gc
can remove items via the gc thread at any time.

.. change::
:tags: orm
:tickets:

The Session class is now present in sqlalchemy.orm.*.
We're moving away from the usage of create_session(),
which has non-standard defaults, for those situations
where a one-step Session constructor is desired. Most
users should stick with sessionmaker() for general use,
however.

.. change::
:tags: orm
:tickets:

query.with_parent() now accepts transient objects
and will use the non-persistent values of their pk/fk
attributes in order to formulate the criterion.
Docs are also clarified as to the purpose of with_parent().

.. change::
:tags: orm
:tickets:

The include_properties and exclude_properties arguments
to mapper() now accept Column objects as members in
addition to strings. This so that same-named Column
objects, such as those within a join(), can be
disambiguated.

.. change::
:tags: orm
:tickets: 1896

A warning is now emitted if a mapper is created against a
join or other single selectable that includes multiple
columns with the same name in its .c. collection,
and those columns aren't explicitly named as part of
the same or separate attributes (or excluded).
In 0.7 this warning will be an exception. Note that
this warning is not emitted when the combination occurs
as a result of inheritance, so that attributes
still allow being overridden naturally.. In 0.7 this will be improved further.

.. change::
:tags: orm
:tickets: 1896

The primary_key argument to mapper() can now specify
a series of columns that are only a subset of
the calculated "primary key" columns of the mapped
selectable, without an error being raised. This
helps for situations where a selectable's effective
primary key is simpler than the number of columns
in the selectable that are actually marked as
"primary_key", such as a join against two
tables on their primary key columns.

.. change::
:tags: orm
:tickets:

An object that's been deleted now gets a flag
'deleted', which prohibits the object from
being re-add()ed to the session, as previously
the object would live in the identity map
silently until its attributes were accessed.
The make_transient() function now resets this
flag along with the "key" flag.

.. change::
:tags: orm
:tickets:

make_transient() can be safely called on an
already transient instance.

.. change::
:tags: orm
:tickets:

a warning is emitted in mapper() if the polymorphic_on
column is not present either in direct or derived
form in the mapped selectable or in the
with_polymorphic selectable, instead of silently
ignoring it. Look for this to become an
exception in 0.7.

.. change::
:tags: orm
:tickets:

Another pass through the series of error messages
emitted when relationship() is configured with
ambiguous arguments. The "foreign_keys"
setting is no longer mentioned, as it is almost
never needed and it is preferable users set up
correct ForeignKey metadata, which is now the
recommendation. If 'foreign_keys'
is used and is incorrect, the message suggests
the attribute is probably unnecessary. Docs
for the attribute are beefed up. This
because all confused relationship() users on the
ML appear to be attempting to use foreign_keys
due to the message, which only confuses them
further since Table metadata is much clearer.

.. change::
:tags: orm
:tickets: 1877

If the "secondary" table has no ForeignKey metadata
and no foreign_keys is set, even though the
user is passing screwed up information, it is assumed
that primary/secondaryjoin expressions should
consider only and all cols in "secondary" to be
foreign. It's not possible with "secondary" for
the foreign keys to be elsewhere in any case.
A warning is now emitted instead of an error,
and the mapping succeeds.

.. change::
:tags: orm
:tickets: 1856

Moving an o2m object from one collection to
another, or vice versa changing the referenced
object by an m2o, where the foreign key is also a
member of the primary key, will now be more
carefully checked during flush if the change in
value of the foreign key on the "many" side is the
result of a change in the primary key of the "one"
side, or if the "one" is just a different object.
In one case, a cascade-capable DB would have
cascaded the value already and we need to look at
the "new" PK value to do an UPDATE, in the other we
need to continue looking at the "old". We now look
at the "old", assuming passive_updates=True,
unless we know it was a PK switch that
triggered the change.

.. change::
:tags: orm
:tickets: 1857

The value of version_id_col can be changed
manually, and this will result in an UPDATE
of the row. Versioned UPDATEs and DELETEs
now use the "committed" value of the
version_id_col in the WHERE clause and
not the pending changed value. The
version generator is also bypassed if
manual changes are present on the attribute.

.. change::
:tags: orm
:tickets:

Repaired the usage of merge() when used with
concrete inheriting mappers. Such mappers frequently
have so-called "concrete" attributes, which are
subclass attributes that "disable" propagation from
the parent - these needed to allow a merge()
operation to pass through without effect.

.. change::
:tags: orm
:tickets: 1863

Specifying a non-column based argument
for column_mapped_collection, including string,
text() etc., will raise an error message that
specifically asks for a column element, no longer
misleads with incorrect information about
text() or literal().

.. change::
:tags: orm
:tickets:

Similarly, for relationship(), foreign_keys,
remote_side, order_by - all column-based
expressions are enforced - lists of strings
are explicitly disallowed since this is a
very common error

.. change::
:tags: orm
:tickets: 1864

Dynamic attributes don't support collection
population - added an assertion for when
set_committed_value() is called, as well as
when joinedload() or subqueryload() options
are applied to a dynamic attribute, instead
of failure / silent failure.

.. change::
:tags: orm
:tickets: 1852

Fixed bug whereby generating a Query derived
from one which had the same column repeated
with different label names, typically
in some UNION situations, would fail to
propagate the inner columns completely to
the outer query.

.. change::
:tags: orm
:tickets: 1881

object_session() raises the proper
UnmappedInstanceError when presented with an
unmapped instance.

.. change::
:tags: orm
:tickets:

Applied further memoizations to calculated Mapper
properties, with significant (~90%) runtime mapper.py
call count reduction in heavily polymorphic mapping
configurations.

.. change::
:tags: orm
:tickets:

mapper _get_col_to_prop private method used
by the versioning example is deprecated;
now use mapper.get_property_by_column() which
will remain the public method for this.

.. change::
:tags: orm
:tickets:

the versioning example works correctly now
if versioning on a col that was formerly
NULL.

.. change::
:tags: sql
:tickets:

Calling execute() on an alias() construct is pending
deprecation for 0.7, as it is not itself an
"executable" construct. It currently "proxies" its
inner element and is conditionally "executable" but
this is not the kind of ambiguity we like these days.

.. change::
:tags: sql
:tickets:

The execute() and scalar() methods of ClauseElement
are now moved appropriately to the Executable
subclass. ClauseElement.execute()/ scalar() are still
present and are pending deprecation in 0.7, but note
these would always raise an error anyway if you were
not an Executable (unless you were an alias(), see
previous note).

.. change::
:tags: sql
:tickets:

Added basic math expression coercion for
Numeric->Integer,
so that resulting type is Numeric regardless
of the direction of the expression.

.. change::
:tags: sql
:tickets: 1855

Changed the scheme used to generate truncated
"auto" index names when using the "index=True"
flag on Column. The truncation only takes
place with the auto-generated name, not one
that is user-defined (an error would be
raised instead), and the truncation scheme
itself is now based on a fragment of an md5
hash of the identifier name, so that multiple
indexes on columns with similar names still
have unique names.

.. change::
:tags: sql
:tickets: 1412

The generated index name also is based on
a "max index name length" attribute which is
separate from the "max identifier length" -
this to appease MySQL who has a max length
of 64 for index names, separate from their
overall max length of 255.

.. change::
:tags: sql
:tickets:

the text() construct, if placed in a column
oriented situation, will at least return NULLTYPE
for its type instead of None, allowing it to
be used a little more freely for ad-hoc column
expressions than before. literal_column()
is still the better choice, however.

.. change::
:tags: sql
:tickets:

Added full description of parent table/column,
target table/column in error message raised when
ForeignKey can't resolve target.

.. change::
:tags: sql
:tickets: 1865

Fixed bug whereby replacing composite foreign key
columns in a reflected table would cause an attempt
to remove the reflected constraint from the table
a second time, raising a KeyError.

.. change::
:tags: sql
:tickets:

the _Label construct, i.e. the one that is produced
whenever you say somecol.label(), now counts itself
in its "proxy_set" unioned with that of its
contained column's proxy set, instead of
directly returning that of the contained column.
This allows column correspondence
operations which depend on the identity of the
_Labels themselves to return the correct result

.. change::
:tags: sql
:tickets: 1852

fixes ORM bug.

.. change::
:tags: engine
:tickets:

Calling fetchone() or similar on a result that
has already been exhausted, has been closed,
or is not a result-returning result now
raises ResourceClosedError, a subclass of
InvalidRequestError, in all cases, regardless
of backend. Previously, some DBAPIs would
raise ProgrammingError (i.e. pysqlite), others
would return None leading to downstream breakages
(i.e. MySQL-python).

.. change::
:tags: engine
:tickets: 1894

Fixed bug in Connection whereby if a "disconnect"
event occurred in the "initialize" phase of the
first connection pool connect, an AttributeError
would be raised when the Connection would attempt
to invalidate the DBAPI connection.

.. change::
:tags: engine
:tickets:

Connection, ResultProxy, as well as Session use
ResourceClosedError for all "this
connection/transaction/result is closed" types of
errors.

.. change::
:tags: engine
:tickets:

Connection.invalidate() can be called more than
once and subsequent calls do nothing.

.. change::
:tags: declarative
:tickets:

if classproperty is used with a regular class-bound
mapper property attribute, it will be called to get the
actual attribute value during initialization. Currently,
there's no advantage to using classproperty on a column
or relationship attribute of a declarative class that
isn't a mixin - evaluation is at the same time as if
classproperty weren't used. But here we at least allow
it to function as expected.

.. change::
:tags: declarative
:tickets:

Fixed bug where "Can't add additional column" message
would display the wrong name.

.. change::
:tags: postgresql
:tickets:

Fixed the psycopg2 dialect to use its
set_isolation_level() method instead of relying
upon the base "SET SESSION ISOLATION" command,
as psycopg2 resets the isolation level on each new
transaction otherwise.

.. change::
:tags: mssql
:tickets:

Fixed "default schema" query to work with
pymssql backend.

.. change::
:tags: firebird
:tickets:

Fixed bug whereby a column default would fail to
reflect if the "default" keyword were lower case.

.. change::
:tags: oracle
:tickets: 1879

Added ROWID type to the Oracle dialect, for those
cases where an explicit CAST might be needed.

.. change::
:tags: oracle
:tickets: 1867

Oracle reflection of indexes has been tuned so
that indexes which include some or all primary
key columns, but not the same set of columns
as that of the primary key, are reflected.
Indexes which contain the identical columns
as that of the primary key are skipped within
reflection, as the index in that case is assumed
to be the auto-generated primary key index.
Previously, any index with PK columns present
would be skipped. Thanks to Kent Bower
for the patch.

.. change::
:tags: oracle
:tickets: 1868

Oracle now reflects the names of primary key
constraints - also thanks to Kent Bower.

.. change::
:tags: informix
:tickets: 1904

Applied patches from to get
basic Informix functionality up again. We
rely upon end-user testing to ensure that
Informix is working to some degree.

.. change::
:tags: documentation
:tickets:

The docs have been reorganized such that the "API
Reference" section is gone - all the docstrings from
there which were public API are moved into the
context of the main doc section that talks about it.
Main docs divided into "SQLAlchemy Core" and
"SQLAlchemy ORM" sections, mapper/relationship docs
have been broken out. Lots of sections rewritten
and/or reorganized.

.. change::
:tags: examples
:tickets:

The beaker_caching example has been reorganized
such that the Session, cache manager,
declarative_base are part of environment, and
custom cache code is portable and now within
"caching_query.py". This allows the example to
be easier to "drop in" to existing projects.

.. change::
:tags: examples
:tickets: 1887

the history_meta versioning recipe sets "unique=False"
when copying columns, so that the versioning
table handles multiple rows with repeating values.

.. changelog::

0.6.3

Not secure
:released: Thu Jul 15 2010

.. change::
:tags: orm
:tickets: 1845

Removed errant many-to-many load in unitofwork
which triggered unnecessarily on expired/unloaded
collections. This load now takes place only if
passive_updates is False and the parent primary
key has changed, or if passive_deletes is False
and a delete of the parent has occurred.

.. change::
:tags: orm
:tickets: 1853

Column-entities (i.e. query(Foo.id)) copy their
state more fully when queries are derived from
themselves + a selectable (i.e. from_self(),
union(), etc.), so that join() and such have the
correct state to work from.

.. change::
:tags: orm
:tickets: 1853

Fixed bug where Query.join() would fail if
querying a non-ORM column then joining without
an on clause when a FROM clause is already
present, now raises a checked exception the
same way it does when the clause is not
present.

.. change::
:tags: orm
:tickets: 1142

Improved the check for an "unmapped class",
including the case where the superclass is mapped
but the subclass is not. Any attempts to access
cls._sa_class_manager.mapper now raise
UnmappedClassError().

.. change::
:tags: orm
:tickets:

Added "column_descriptions" accessor to Query,
returns a list of dictionaries containing
naming/typing information about the entities
the Query will return. Can be helpful for
building GUIs on top of ORM queries.

.. change::
:tags: mysql
:tickets: 1848

The _extract_error_code() method now works
correctly with each MySQL dialect (
MySQL-python, OurSQL, MySQL-Connector-Python,
PyODBC). Previously,
the reconnect logic would fail for OperationalError
conditions, however since MySQLdb and OurSQL
have their own reconnect feature, there was no
symptom for these drivers here unless one
watched the logs.

.. change::
:tags: oracle
:tickets: 1840

More tweaks to cx_oracle Decimal handling.
"Ambiguous" numerics with no decimal place
are coerced to int at the connection handler
level. The advantage here is that ints
come back as ints without SQLA type
objects being involved and without needless
conversion to Decimal first.

Unfortunately, some exotic subquery cases
can even see different types between
individual result rows, so the Numeric
handler, when instructed to return Decimal,
can't take full advantage of "native decimal"
mode and must run isinstance() on every value
to check if its Decimal already. Reopen of

.. changelog::

0.6.2

Not secure
:released: Tue Jul 06 2010

.. change::
:tags: orm
:tickets:

Query.join() will check for a call of the
form query.join(target, clause_expression),
i.e. missing the tuple, and raise an informative
error message that this is the wrong calling form.

.. change::
:tags: orm
:tickets: 1824

Fixed bug regarding flushes on self-referential
bi-directional many-to-many relationships, where
two objects made to mutually reference each other
in one flush would fail to insert a row for both
sides. Regression from 0.5.

.. change::
:tags: orm
:tickets:

the post_update feature of relationship() has been
reworked architecturally to integrate more closely
with the new 0.6 unit of work. The motivation
for the change is so that multiple "post update"
calls, each affecting different foreign key
columns of the same row, are executed in a single
UPDATE statement, rather than one UPDATE
statement per column per row. Multiple row
updates are also batched into executemany()s as
possible, while maintaining consistent row ordering.

.. change::
:tags: orm
:tickets:

Query.statement, Query.subquery(), etc. now transfer
the values of bind parameters, i.e. those specified
by query.params(), into the resulting SQL expression.
Previously the values would not be transferred
and bind parameters would come out as None.

.. change::
:tags: orm
:tickets:

Subquery-eager-loading now works with Query objects
which include params(), as well as get() Queries.

.. change::
:tags: orm
:tickets:

Can now call make_transient() on an instance that
is referenced by parent objects via many-to-one,
without the parent's foreign key value getting
temporarily set to None - this was a function
of the "detect primary key switch" flush handler.
It now ignores objects that are no longer
in the "persistent" state, and the parent's
foreign key identifier is left unaffected.

.. change::
:tags: orm
:tickets:

query.order_by() now accepts False, which cancels
any existing order_by() state on the Query, allowing
subsequent generative methods to be called which do
not support ORDER BY. This is not the same as the
already existing feature of passing None, which
suppresses any existing order_by() settings, including
those configured on the mapper. False will make it
as though order_by() was never called, while
None is an active setting.

.. change::
:tags: orm
:tickets:

An instance which is moved to "transient", has
an incomplete or missing set of primary key
attributes, and contains expired attributes, will
raise an InvalidRequestError if an expired attribute
is accessed, instead of getting a recursion overflow.

.. change::
:tags: orm
:tickets:

The make_transient() function is now in the generated
documentation.

.. change::
:tags: orm
:tickets:

make_transient() removes all "loader" callables from
the state being made transient, removing any
"expired" state - all unloaded attributes reset back
to undefined, None/empty on access.

.. change::
:tags: sql
:tickets: 1822

The warning emitted by the Unicode and String types
with convert_unicode=True no longer embeds the actual
value passed. This so that the Python warning
registry does not continue to grow in size, the warning
is emitted once as per the warning filter settings,
and large string values don't pollute the output.

.. change::
:tags: sql
:tickets:

Fixed bug that would prevent overridden clause
compilation from working for "annotated" expression
elements, which are often generated by the ORM.

.. change::
:tags: sql
:tickets: 1400

The argument to "ESCAPE" of a LIKE operator or similar
is passed through render_literal_value(), which may
implement escaping of backslashes.

.. change::
:tags: sql
:tickets:

Fixed bug in Enum type which blew away native_enum
flag when used with TypeDecorators or other adaption
scenarios.

.. change::
:tags: sql
:tickets:

Inspector hits bind.connect() when invoked to ensure
initialize has been called. the internal name ".conn"
is changed to ".bind", since that's what it is.

.. change::
:tags: sql
:tickets:

Modified the internals of "column annotation" such that
a custom Column subclass can safely override
_constructor to return Column, for the purposes of
making "configurational" column classes that aren't
involved in proxying, etc.

.. change::
:tags: sql
:tickets: 1829

Column.copy() takes along the "unique" attribute
among others, fixes regarding declarative
mixins

.. change::
:tags: postgresql
:tickets: 1400

render_literal_value() is overridden which escapes
backslashes, currently applies to the ESCAPE clause
of LIKE and similar expressions.
Ultimately this will have to detect the value of
"standard_conforming_strings" for full behavior.

.. change::
:tags: postgresql
:tickets: 1836

Won't generate "CREATE TYPE" / "DROP TYPE" if
using types.Enum on a PG version prior to 8.3 -
the supports_native_enum flag is fully
honored.

.. change::
:tags: mysql
:tickets: 1826

MySQL dialect doesn't emit CAST() for MySQL version
detected < 4.0.2. This allows the unicode
check on connect to proceed.

.. change::
:tags: mysql
:tickets:

MySQL dialect now detects NO_BACKSLASH_ESCAPES sql
mode, in addition to ANSI_QUOTES.

.. change::
:tags: mysql
:tickets: 1400

render_literal_value() is overridden which escapes
backslashes, currently applies to the ESCAPE clause
of LIKE and similar expressions. This behavior
is derived from detecting the value of
NO_BACKSLASH_ESCAPES.

.. change::
:tags: oracle
:tickets: 1819

Fixed ora-8 compatibility flags such that they
don't cache a stale value from before the first
database connection actually occurs.

.. change::
:tags: oracle
:tickets: 1840

Oracle's "native decimal" metadata begins to return
ambiguous typing information about numerics
when columns are embedded in subqueries as well
as when ROWNUM is consulted with subqueries, as we
do for limit/offset. We've added these ambiguous
conditions to the cx_oracle "convert to Decimal()"
handler, so that we receive numerics as Decimal
in more cases instead of as floats. These are
then converted, if requested, into Integer
or Float, or otherwise kept as the lossless
Decimal.

.. change::
:tags: mssql
:tickets: 1825

If server_version_info is outside the usual
range of (8, ), (9, ), (10, ), a warning is emitted
which suggests checking that the FreeTDS version
configuration is using 7.0 or 8.0, not 4.2.

.. change::
:tags: firebird
:tickets: 1823

Fixed incorrect signature in do_execute(), error
introduced in 0.6.1.

.. change::
:tags: firebird
:tickets: 1813

Firebird dialect adds CHAR, VARCHAR types which
accept a "charset" flag, to support Firebird
"CHARACTER SET" clause.

.. change::
:tags: declarative
:tickets: 1805, 1796, 1751

Added support for classproperty to provide
any kind of schema/mapping construct from a
declarative mixin, including columns with foreign
keys, relationships, column_property, deferred.
This solves all such issues on declarative mixins.
An error is raised if any MapperProperty subclass
is specified on a mixin without using classproperty.

.. change::
:tags: declarative
:tickets: 1821

a mixin class can now define a column that matches
one which is present on a __table__ defined on a
subclass. It cannot, however, define one that is
not present in the __table__, and the error message
here now works.

.. change::
:tags: extension, compiler
:tickets: 1838

The 'default' compiler is automatically copied over
when overriding the compilation of a built in
clause construct, so no KeyError is raised if the
user-defined compiler is specific to certain
backends and compilation for a different backend
is invoked.

.. change::
:tags: documentation
:tickets: 1820

Added documentation for the Inspector.

.. change::
:tags: documentation
:tickets: 1830

Fixed memoized_property and memoized_instancemethod
decorators so that Sphinx documentation picks up
these attributes and methods, such as
ResultProxy.inserted_primary_key.

.. changelog::

0.6.1

Not secure
:released: Mon May 31 2010

.. change::
:tags: orm
:tickets: 1782

Fixed regression introduced in 0.6.0 involving improper
history accounting on mutable attributes.

.. change::
:tags: orm
:tickets: 1807

Fixed regression introduced in 0.6.0 unit of work refactor
that broke updates for bi-directional relationship()
with post_update=True.

.. change::
:tags: orm
:tickets: 1789

session.merge() will not expire attributes on the returned
instance if that instance is "pending".

.. change::
:tags: orm
:tickets: 1802

fixed __setstate__ method of CollectionAdapter to not
fail during deserialize where parent InstanceState not
yet unserialized.

.. change::
:tags: orm
:tickets: 1797

Added internal warning in case an instance without a
full PK happened to be expired and then was asked
to refresh.

.. change::
:tags: orm
:tickets:

Added more aggressive caching to the mapper's usage of
UPDATE, INSERT, and DELETE expressions. Assuming the
statement has no per-object SQL expressions attached,
the expression objects are cached by the mapper after
the first create, and their compiled form is stored
persistently in a cache dictionary for the duration of
the related Engine. The cache is an LRUCache for the
rare case that a mapper receives an extremely
high number of different column patterns as UPDATEs.

.. change::
:tags: sql
:tickets: 1793

expr.in_() now accepts a text() construct as the argument.
Grouping parenthesis are added automatically, i.e. usage
is like `col.in_(text("select id from table"))`.

.. change::
:tags: sql
:tickets:

Columns of _Binary type (i.e. LargeBinary, BLOB, etc.)
will coerce a "basestring" on the right side into a
_Binary as well so that required DBAPI processing
takes place.

.. change::
:tags: sql
:tickets: 1801

Added table.add_is_dependent_on(othertable), allows manual
placement of dependency rules between two Table objects
for use within create_all(), drop_all(), sorted_tables.

.. change::
:tags: sql
:tickets: 1778

Fixed bug that prevented implicit RETURNING from functioning
properly with composite primary key that contained zeroes.

.. change::
:tags: sql
:tickets:

Fixed errant space character when generating ADD CONSTRAINT
for a named UNIQUE constraint.

.. change::
:tags: sql
:tickets: 1571

Fixed "table" argument on constructor of ForeignKeyConstraint

.. change::
:tags: sql
:tickets: 1786

Fixed bug in connection pool cursor wrapper whereby if a
cursor threw an exception on close(), the logging of the
message would fail.

.. change::
:tags: sql
:tickets:

the _make_proxy() method of ColumnClause and Column now use
self.__class__ to determine the class of object to be returned
instead of hardcoding to ColumnClause/Column, making it slightly
easier to produce specific subclasses of these which work in
alias/subquery situations.

.. change::
:tags: sql
:tickets: 1798

func.XXX() doesn't inadvertently resolve to non-Function
classes (e.g. fixes func.text()).

.. change::
:tags: engines
:tickets: 1781

Fixed building the C extensions on Python 2.4.

.. change::
:tags: engines
:tickets:

Pool classes will reuse the same "pool_logging_name" setting
after a dispose() occurs.

.. change::
:tags: engines
:tickets:

Engine gains an "execution_options" argument and
update_execution_options() method, which will apply to
all connections generated by this engine.

.. change::
:tags: mysql
:tickets: 1794

func.sysdate() emits "SYSDATE()", i.e. with the ending
parenthesis, on MySQL.

.. change::
:tags: sqlite
:tickets: 1812

Fixed concatenation of constraints when "PRIMARY KEY"
constraint gets moved to column level due to SQLite
AUTOINCREMENT keyword being rendered.

.. change::
:tags: oracle
:tickets: 1775

Added a check for cx_oracle versions lower than version 5,
in which case the incompatible "output type handler" won't
be used. This will impact decimal accuracy and some
unicode handling issues.

.. change::
:tags: oracle
:tickets: 1790

Fixed use_ansi=False mode, which was producing broken
WHERE clauses in pretty much all cases.

.. change::
:tags: oracle
:tickets: 1808

Re-established support for Oracle 8 with cx_oracle,
including that use_ansi is set to False automatically,
NVARCHAR2 and NCLOB are not rendered for Unicode,
"native unicode" check doesn't fail, cx_oracle
"native unicode" mode is disabled, VARCHAR() is emitted
with bytes count instead of char count.

.. change::
:tags: oracle
:tickets: 1670

oracle_xe 5 doesn't accept a Python unicode object in
its connect string in normal Python 2.x mode - so we coerce
to str() directly. non-ascii characters aren't supported
in connect strings here since we don't know what encoding
we could use.

.. change::
:tags: oracle
:tickets: 1815

FOR UPDATE is emitted in the syntactically correct position
when limit/offset is used, i.e. the ROWNUM subquery.
However, Oracle can't really handle FOR UPDATE with ORDER BY
or with subqueries, so its still not very usable, but at
least SQLA gets the SQL past the Oracle parser.

.. change::
:tags: firebird
:tickets: 1521

Added a label to the query used within has_table() and
has_sequence() to work with older versions of Firebird
that don't provide labels for result columns.

.. change::
:tags: firebird
:tickets: 1779

Added integer coercion to the "type_conv" attribute when
passed via query string, so that it is properly interpreted
by Kinterbasdb.

.. change::
:tags: firebird
:tickets: 1646

Added 'connection shutdown' to the list of exception strings
which indicate a dropped connection.

.. change::
:tags: sqlsoup
:tickets: 1783

the SqlSoup constructor accepts a `base` argument which specifies
the base class to use for mapped classes, the default being
`object`.

.. changelog::

Page 40 of 51

Links

Releases

Has known vulnerabilities

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.