./databases/py-sqlalchemy, Python SQL toolkit and Object Relational Mapper

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]

Branch: CURRENT, Version: 1.3.19, Package name: py37-sqlalchemy-1.3.19, Maintainer: pkgsrc-users

SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
gives application developers the full power and flexibility of SQL.

It provides a full suite of well known enterprise-level persistence
patterns, designed for efficient and high-performing database access,
adapted into a simple and Pythonic domain language.

Required to run:
[devel/py-setuptools] [lang/python37]

Required to build:

Master sites:

SHA1: ebbe5bbd118de0358bfb6d3118a688899a856852
RMD160: 1c7c84c15452cdf8ad88ea1f3bf61e76cd8a6a72
Filesize: 6052.598 KB

Version history: (Expand)

CVS history: (Expand)

   2020-09-10 11:19:16 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.19



[orm] [usecase]
Adjusted the workings of the Mapper.all_orm_descriptors() accessor to represent \ 
the attributes in the order that they are located in a deterministic way, \ 
assuming the use of Python 3.6 or higher which maintains the sorting order of \ 
class attributes based on how they were declared. This sorting is not guaranteed \ 
to match the declared order of attributes in all cases however; see the method \ 
documentation for the exact scheme.

orm declarative

[usecase] [declarative] [orm]
The name of the virtual column used when using the AbstractConcreteBase and \ 
ConcreteBase classes can now be customized, to allow for models that have a \ 
column that is actually named type. Pull request courtesy Jesse-Bakker.


[sql] [bug]
Repaired an issue where the “ORDER BY” clause rendering a label name rather \ 
than a complete expression, which is particularly important for SQL Server, \ 
would fail to occur if the expression were enclosed in a parenthesized grouping \ 
in some cases. This case has been added to test support. The change additionally \ 
adjusts the “automatically add ORDER BY columns when DISTINCT is present” \ 
behavior of ORM query, deprecated in 1.4, to more accurately detect column \ 
expressions that are already present.

[sql] [bug] [datatypes]
The LookupError message will now provide the user with up to four possible \ 
values that a column is constrained to via the Enum. Values longer than 11 \ 
characters will be truncated and replaced with ellipses. Pull request courtesy \ 
Ramon Williams.

[sql] [bug]
Fixed issue where the Connection.execution_options.schema_translate_map feature \ 
would not take effect when the Sequence.next_value() function function for a \ 
Sequence were used in the Column.server_default parameter and the create table \ 
DDL were emitted.


[postgresql] [bug]
Fixed issue where the return type for the various RANGE comparison operators \ 
would itself be the same RANGE type rather than BOOLEAN, which would cause an \ 
undesirable result in the case that a TypeDecorator that defined \ 
result-processing behavior were in use. Pull request courtesy Jim Bosch.


[mysql] [usecase]
The MySQL dialect will render FROM DUAL for a SELECT statement that has no FROM \ 
clause but has a WHERE clause. This allows things like “SELECT 1 WHERE EXISTS \ 
(subquery)” kinds of queries to be used as well as other use cases.

[mysql] [bug]
Fixed an issue where CREATE TABLE statements were not specifying the COLLATE \ 
keyword correctly.

[mysql] [bug]
Added MariaDB code 1927 to the list of “disconnect” codes, as recent MariaDB \ 
versions apparently use this code when the database server was stopped.


[sqlite] [bug] [mssql] [reflection]
Applied a sweep through all included dialects to ensure names that contain \ 
single or double quotes are properly escaped when querying system tables, for \ 
all Inspector methods that accept object names as an argument (e.g. table names, \ 
view names, etc). SQLite and MSSQL contained two quoting issues that were \ 


[mssql] [bug] [sql]
Fixed bug where the mssql dialect incorrectly escaped object names that \ 
contained ‘]’ character(s).


[usecase] [py3k]
Added a **kw argument to the DeclarativeMeta.__init__() method. This allows a \ 
class to support the PEP 487 metaclass hook __init_subclass__.
   2020-07-08 16:40:26 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.18



[orm] [usecase]
Improve error message when using Query.filter_by() in a query where the first \ 
entity is not a mapped class.

[orm] [usecase]
Added a new parameter query_expression.default_expr to the query_expression() \ 
construct, which will be appled to queries automatically if the \ 
with_expression() option is not used. Pull request courtesy Haoyu Sun.


[engine] [bug]
Further refinements to the fixes to the “reset” agent fixed in 5326, which \ 
now emits a warning when it is not being correctly invoked and corrects for the \ 
behavior. Additional scenarios have been identified and fixed where this warning \ 
was being emitted.

[engine] [bug]
Fixed issue in URL object where stringifying the object would not URL encode \ 
special characters, preventing the URL from being re-consumable as a real URL. \ 
Pull request courtesy Miguel Grinberg.


[sql] [usecase]
Added a “.schema” parameter to the table() construct, allowing ad-hoc table \ 
expressions to also include a schema name. Pull request courtesy Dylan Modesitt.

[sql] [bug]
Correctly apply self_group in type_coerce element.
The type coerce element did not correctly apply grouping rules when using in an \ 

[sql] [bug]
Added Select.with_hint() output to the generic SQL string that is produced when \ 
calling str() on a statement. Previously, this clause would be omitted under the \ 
assumption that it was dialect specific. The hint text is presented within \ 
brackets to indicate the rendering of such hints varies among backends.

[sql] [schema]
Introduce IdentityOptions to store common parameters for sequences and identity \ 

[sql] [change] [sybase]
Added .offset support to sybase dialect. Pull request courtesy Alan D. Snow.


[schema] [bug]
Fixed issue where dialect_options were omitted when a database object (e.g., \ 
Table) was copied using tometadata().


[mysql] [usecase]
Implemented row-level locking support for mysql. Pull request courtesy Quentin \ 


[sqlite] [usecase]
SQLite 3.31 added support for computed column. This change enables their support \ 
in SQLAlchemy when targeting SQLite.

[sqlite] [bug]
Added “exists” to the list of reserved words for SQLite so that this word \ 
will be quoted when used as a label or column name. Pull request courtesy \ 
Thodoris Sotiropoulos.


[mssql] [bug]
Refined the logic used by the SQL Server dialect to interpret multi-part schema \ 
names that contain many dots, to not actually lose any dots if the name does not \ 
have bracking or quoting used, and additionally to support a “dbname” token \ 
that has many parts including that it may have multiple, independently-bracketed \ 

[mssql] [bug] [pyodbc]
Fixed an issue in the pyodbc connector such that a warning about pyodbc \ 
“drivername” would be emitted when using a totally empty URL. Empty URLs are \ 
normal when producing a non-connected dialect object or when using the \ 
“creator” argument to create_engine(). The warning now only emits if the \ 
driver name is missing but other parameters are still present.

[mssql] [bug]
Fixed issue with assembling the ODBC connection string for the pyodbc DBAPI. \ 
Tokens containing semicolons and/or braces “{}” were not being correctly \ 
escaped, causing the ODBC driver to misinterpret the connection string \ 

[mssql] [bug]
Fixed issue where datetime.time parameters were being converted to \ 
datetime.datetime, making them incompatible with comparisons like >= against \ 
an actual TIME column.

[mssql] [bug]
Fixed an issue where the is_disconnect function in the SQL Server pyodbc dialect \ 
was incorrectly reporting the disconnect state when the exception messsage had a \ 
substring that matched a SQL Server ODBC error code.

[mssql] [change]
Moved the supports_sane_rowcount_returning = False requirement from the \ 
PyODBCConnector level to the MSDialect_pyodbc since pyodbc does work properly in \ 
some circumstances.


[oracle] [bug] [reflection]
Fixed bug in Oracle dialect where indexes that contain the full set of primary \ 
key columns would be mistaken as the primary key index itself, which is omitted, \ 
even if there were multiples. The check has been refined to compare the name of \ 
the primary key constraint against the index name itself, rather than trying to \ 
guess based on the columns present in the index.


[change] [examples]
Added new option --raw to the examples.performance suite which will dump the raw \ 
profile test for consumption by any number of profiling visualizer tools. \ 
Removed the “runsnake” option as runsnake is very hard to build at this \ 
   2020-05-18 12:43:22 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.17



[orm] [usecase]
Added an accessor Comparator.expressions which provides access to the group of \ 
columns mapped under a multi-column ColumnProperty attribute.

[orm] [usecase]
Introduce relationship.sync_backref flag in a relationship to control if the \ 
synchronization events that mutate the in-Python attributes are added. This \ 
supersedes the previous change 5149, which warned that viewonly=True \ 
relationship target of a back_populates or backref configuration would be \ 

[orm] [bug]
Fixed bug where using with_polymorphic() as the target of a join via \ 
RelationshipComparator.of_type() on a mapper that already has a subquery-based \ 
with_polymorphic setting that’s equivalent to the one requested would not \ 
correctly alias the ON clause in the join.

[orm] [bug]
Fixed issue in the area of where loader options such as selectinload() interact \ 
with the baked query system, such that the caching of a query is not supposed to \ 
occur if the loader options themselves have elements such as with_polymorphic() \ 
objects in them that currently are not cache-compatible. The baked loader could \ 
sometimes not fully invalidate itself in these some of these scenarios leading \ 
to missed eager loads.

[orm] [bug]
Modified the internal “identity set” implementation, which is a set that \ 
hashes objects on their id() rather than their hash values, to not actually call \ 
the __hash__() method of the objects, which are typically user-mapped objects. \ 
Some methods were calling this method as a side effect of the implementation.

[orm] [bug]
An informative error message is raised when an ORM many-to-one comparison is \ 
attempted against an object that is not an actual mapped instance. Comparisons \ 
such as those to scalar subqueries aren’t supported; generalized comparison \ 
with subqueries is better achieved using Comparator.has().


[engine] [bug]
Fixed fairly critical issue where the DBAPI connection could be returned to the \ 
connection pool while still in an un-rolled-back state. The reset agent \ 
responsible for rolling back the connection could be corrupted in the case that \ 
the transaction was “closed” without being rolled back or committed, which \ 
can occur in some scenarios when using ORM sessions and emitting .close() in a \ 
certain pattern involving savepoints. The fix ensures that the reset agent is \ 
always active.


[schema] [bug]
Fixed issue where an Index that is deferred in being associated with a table, \ 
such as as when it contains a Column that is not associated with any Table yet, \ 
would fail to attach correctly if it also contained a non table-oriented \ 

[schema] [bug]
A warning is emitted when making use of the MetaData.sorted_tables attribute as \ 
well as the sort_tables() function, and the given tables cannot be correctly \ 
sorted due to a cyclic dependency between foreign key constraints. In this case, \ 
the functions will no longer sort the involved tables by foreign key, and a \ 
warning will be emitted. Other tables that are not part of the cycle will still \ 
be returned in dependency order. Previously, the sorted_table routines would \ 
return a collection that would unconditionally omit all foreign keys when a \ 
cycle was detected, and no warning was emitted.

Add comment attribute to Column __repr__ method.


[postgresql] [usecase]
Added support for columns or type ARRAY of Enum, JSON or JSONB in PostgreSQL. \ 
Previously a workaround was required in these use cases.

[postgresql] [usecase]
Raise an explicit CompileError when adding a table with a column of type ARRAY \ 
of Enum configured with Enum.native_enum set to False when \ 
Enum.create_constraint is not set to False


[mssql] [bug] [reflection]
Fix a regression introduced by the reflection of computed column in MSSQL when \ 
using the legacy TDS version 4.2. The dialect will try to detect the protocol \ 
version of first connect and run in compatibility mode if it cannot detect it.

[mssql] [bug] [reflection]
Fix a regression introduced by the reflection of computed column in MSSQL when \ 
using SQL server versions before 2012, which does not support the concat \ 


[oracle] [bug]
Some modifications to how the cx_oracle dialect sets up per-column outputtype \ 
handlers for LOB and numeric datatypes to adjust for potential changes coming in \ 
cx_Oracle 8.

[oracle] [bug] [performance]
Changed the implementation of fetching CLOB and BLOB objects to use \ 
cx_Oracle’s native implementation which fetches CLOB/BLOB objects inline with \ 
other result columns, rather than performing a separate fetch. As always, this \ 
can be disabled by setting auto_convert_lobs to False.
As part of this change, the behavior of a CLOB that was given a blank string on \ 
INSERT now returns None on SELECT, which is now consistent with that of VARCHAR \ 
on Oracle.


[firebird] [change]
Adjusted dialect loading for firebird:// URIs so the external \ 
sqlalchemy-firebird dialect will be used if it has been installed, otherwise \ 
fall back to the (now deprecated) internal Firebird dialect.
   2020-04-10 09:58:17 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.16



[orm] [bug]
Fixed bug in orm.selectinload() loading option where two or more loaders that \ 
represent different relationships with the same string key name as referenced \ 
from a single orm.with_polymorphic() construct with multiple subclass mappers \ 
would fail to invoke each subqueryload separately, instead making use of a \ 
single string-based slot that would prevent the other loaders from being \ 

[orm] [bug]
Fixed issue where a lazyload that uses session-local “get” against a target \ 
many-to-one relationship where an object with the correct primary key is \ 
present, however it’s an instance of a sibling class, does not correctly \ 
return None as is the case when the lazy loader actually emits a load for that \ 

[orm] [performance]
Modified the queries used by subqueryload and selectinload to no longer ORDER BY \ 
the primary key of the parent entity; this ordering was there to allow the rows \ 
as they come in to be copied into lists directly with a minimal level of \ 
Python-side collation. However, these ORDER BY clauses can negatively impact the \ 
performance of the query as in many scenarios these columns are derived from a \ 
subquery or are otherwise not actual primary key columns such that SQL planners \ 
cannot make use of indexes. The Python-side collation uses the native \ 
itertools.group_by() to collate the incoming rows, and has been modified to \ 
allow multiple row-groups-per-parent to be assembled together using \ 
list.extend(), which should still allow for relatively fast Python-side \ 
performance. There will still be an ORDER BY present for a relationship that \ 
includes an explicit order_by parameter, however this is the only ORDER BY that \ 
will be added to the query for both kinds of loading.

orm declarative

[bug] [declarative] [orm]
The string argument accepted as the first positional argument by the \ 
relationship() function when using the Declarative API is no longer interpreted \ 
using the Python eval() function; instead, the name is dot separated and the \ 
names are looked up directly in the name resolution dictionary without treating \ 
the value as a Python expression. However, passing a string argument to the \ 
other relationship() parameters that necessarily must accept Python expressions \ 
will still use eval(); the documentation has been clarified to ensure that there \ 
is no ambiguity that this is in use.
See also
Evaluation of relationship arguments - details on string evaluation


[sql] [types]
Add ability to literal compile a DateTime, Date or :class:”Time” when using \ 
the string dialect for debugging purposes. This change does not impact real \ 
dialect implementation that retain their current behavior.


[schema] [reflection]
Added support for reflection of “computed” columns, which are now returned \ 
as part of the structure returned by Inspector.get_columns(). When reflecting \ 
full Table objects, computed columns will be represented using the Computed \ 


[postgresql] [bug]
Fixed issue where a “covering” index, e.g. those which have an INCLUDE \ 
clause, would be reflected including all the columns in INCLUDE clause as \ 
regular columns. A warning is now emitted if these additional columns are \ 
detected indicating that they are currently ignored. Note that full support for \ 
“covering” indexes is part of 4458. Pull request courtesy Marat \ 


[mysql] [bug]
Fixed issue in MySQL dialect when connecting to a psuedo-MySQL database such as \ 
that provided by ProxySQL, the up front check for isolation level when it \ 
returns no row will not prevent the dialect from continuing to connect. A \ 
warning is emitted that the isolation level could not be detected.


[sqlite] [usecase]
Implemented AUTOCOMMIT isolation level for SQLite when using pysqlite.


[mssql] [usecase] [mysql] [oracle]
Added support for ColumnOperators.is_distinct_from() and \ 
ColumnOperators.isnot_distinct_from() to SQL Server, MySQL, and Oracle.


[oracle] [usecase]
Implemented AUTOCOMMIT isolation level for Oracle when using cx_Oracle. Also \ 
added a fixed default isolation level of READ COMMITTED for Oracle.

[oracle] [bug] [reflection]
Fixed regression / incorrect fix caused by fix for 5146 where the Oracle dialect \ 
reads from the “all_tab_comments” view to get table comments but fails to \ 
accommodate for the current owner of the table being requested, causing it to \ 
read the wrong comment if multiple tables of the same name exist in multiple \ 


[bug] [tests]
Fixed an issue that prevented the test suite from running with the recently \ 
released py.test 5.4.0.

[enum] [types]
The Enum type now supports the parameter Enum.length to specify the length of \ 
the VARCHAR column to create when using non native enums by setting \ 
Enum.native_enum to False

Ensured that the “pyproject.toml” file is not included in builds, as the \ 
presence of this file indicates to pip that a pep-517 installation process \ 
should be used. As this mode of operation appears to be not well supported by \ 
current tools / distros, these problems are avoided within the scope of \ 
SQLAlchemy installation by omitting the file.



[orm] [bug]
Adjusted the error message emitted by Query.join() when a left hand side can’t \ 
be located that the Query.select_from() method is the best way to resolve the \ 
issue. Also, within the 1.3 series, used a deterministic ordering when \ 
determining the FROM clause from a given column entity passed to Query so that \ 
the same expression is determined each time.

[orm] [bug]
Fixed regression in 1.3.14 due to 4849 where a sys.exc_info() call failed to be \ 
invoked correctly when a flush error would occur. Test coverage has been added \ 
for this exception case.



[general] [bug] [py3k]
Applied an explicit “cause” to most if not all internally raised exceptions \ 
that are raised from within an internal exception catch, to avoid misleading \ 
stacktraces that suggest an error within the handling of an exception. While it \ 
would be preferable to suppress the internally caught exception in the way that \ 
the __suppress_context__ attribute would, there does not as yet seem to be a way \ 
to do this without suppressing an enclosing user constructed context, so for now \ 
it exposes the internally caught exception as the cause so that full information \ 
about the context of the error is maintained.


[orm] [usecase]
Added a new flag InstanceEvents.restore_load_context and \ 
SessionEvents.restore_load_context which apply to the InstanceEvents.load(), \ 
InstanceEvents.refresh(), and SessionEvents.loaded_as_persistent() events, which \ 
when set will restore the “load context” of the object after the event hook \ 
has been called. This ensures that the object remains within the “loader \ 
context” of the load operation that is already ongoing, rather than the object \ 
being transferred to a new load context due to refresh operations which may have \ 
occurred in the event. A warning is now emitted when this condition occurs, \ 
which recommends use of the flag to resolve this case. The flag is “opt-in” \ 
so that there is no risk introduced to existing applications.
The change additionally adds support for the raw=True flag to session lifecycle \ 

[orm] [bug]
Fixed regression caused in 1.3.13 by 5056 where a refactor of the ORM path \ 
registry system made it such that a path could no longer be compared to an empty \ 
tuple, which can occur in a particular kind of joined eager loading path. The \ 
“empty tuple” use case has been resolved so that the path registry is \ 
compared to a path registry in all cases; the PathRegistry object itself now \ 
implements __eq__() and __ne__() methods which will take place for all equality \ 
comparisons and continue to succeed in the not anticipated case that a non- \ 
PathRegistry object is compared, while emitting a warning that this object \ 
should not be the subject of the comparison.

[orm] [bug]
Setting a relationship to viewonly=True which is also the target of a \ 
back_populates or backref configuration will now emit a warning and eventually \ 
be disallowed. back_populates refers specifically to mutation of an attribute or \ 
collection, which is disallowed when the attribute is subject to viewonly=True. \ 
The viewonly attribute is not subject to persistence behaviors which means it \ 
will not reflect correct results when it is locally mutated.

[orm] [bug]
Fixed an additional regression in the same area as that of 5080 introduced in \ 
1.3.0b3 via 4468 where the ability to create a joined option across a \ 
with_polymorphic() into a relationship against the base class of that \ 
with_polymorphic, and then further into regular mapped relationships would fail \ 
as the base class component would not add itself to the load path in a way that \ 
could be located by the loader strategy. The changes applied in 5080 have been \ 
further refined to also accommodate this scenario.


[engine] [bug]
Expanded the scope of cursor/connection cleanup when a statement is executed to \ 
include when the result object fails to be constructed, or an \ 
after_cursor_execute() event raises an error, or autocommit / autoclose fails. \ 
This allows the DBAPI cursor to be cleaned up on failure and for connectionless \ 
execution allows the connection to be closed out and returned to the connection \ 
pool, where previously it waiting until garbage collection would trigger a pool \ 


[sql] [bug] [postgresql]
Fixed bug where a CTE of an INSERT/UPDATE/DELETE that also uses RETURNING could \ 
then not be SELECTed from directly, as the internal state of the compiler would \ 
try to treat the outer SELECT as a DELETE statement itself and access \ 
nonexistent state.


[postgresql] [bug]
Fixed issue where the “schema_translate_map” feature would not work with a \ 
PostgreSQL native enumeration type (i.e. Enum, postgresql.ENUM) in that while \ 
the “CREATE TYPE” statement would be emitted with the correct schema, the \ 
schema would not be rendered in the CREATE TABLE statement at the point at which \ 
the enumeration was referenced.

[postgresql] [bug] [reflection]
Fixed bug where PostgreSQL reflection of CHECK constraints would fail to parse \ 
the constraint if the SQL text contained newline characters. The regular \ 
expression has been adjusted to accommodate for this case. Pull request courtesy \ 
Eric Borczuk.


[mysql] [bug]
Fixed issue in MySQL mysql.Insert.on_duplicate_key_update() construct where \ 
using a SQL function or other composed expression for a column argument would \ 
not properly render the VALUES keyword surrounding the column itself.


[mssql] [bug]
Fixed issue where the mssql.DATETIMEOFFSET type would not accommodate for the \ 
None value, introduced as part of the series of fixes for this type first \ 
introduced in 4983, 5045. Additionally, added support for passing a \ 
backend-specific date formatted string through this type, as is typically \ 
allowed for date/time types on most other DBAPIs.


[oracle] [bug]
Fixed a reflection bug where table comments could only be retrieved for tables \ 
actually owned by the user but not for tables visible to the user but owned by \ 
someone else. Pull request courtesy Dave Hirschfeld.


[usecase] [ext]
Added keyword arguments to the MutableList.sort() function so that a key \ 
function as well as the “reverse” keyword argument can be provided.

[bug] [performance]
Revised an internal change to the test system added as a result of 5085 where a \ 
testing-related module per dialect would be loaded unconditionally upon making \ 
use of that dialect, pulling in SQLAlchemy’s testing framework as well as the \ 
ORM into the module import space. This would only impact initial startup time \ 
and memory to a modest extent, however it’s best that these additional modules \ 
aren’t reverse-dependent on straight Core usage.

[bug] [installation]
Vendored the inspect.formatannotation function inside of sqlalchemy.util.compat, \ 
which is needed for the vendored version of inspect.formatargspec. The function \ 
is not documented in cPython and is not guaranteed to be available in future \ 
Python versions.
   2020-03-22 23:45:24 by Roland Illig | Files touched by this commit (1)
Log message:
databases/py-sqlalchemy: remove nonexistent file

The test runner has apparently been replaced with a test suite.
   2020-02-04 17:57:21 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.13


[orm] [bug] [engine]
Added test support and repaired a wide variety of unnecessary reference cycles \ 
created for short-lived objects, mostly in the area of ORM queries. Thanks much \ 
to Carson Ip for the help on this.

[orm] [bug]
Fixed regression in loader options introduced in 1.3.0b3 via 4468 where the \ 
ability to create a loader option using PropComparator.of_type() targeting an \ 
aliased entity that is an inheriting subclass of the entity which the preceding \ 
relationship refers to would fail to produce a matching path. See also 5082 \ 
fixed in this same release which involves a similar kind of issue.

[orm] [bug]
Fixed regression in joined eager loading introduced in 1.3.0b3 via 4468 where \ 
the ability to create a joined option across a with_polymorphic() into a \ 
polymorphic subclass using RelationshipProperty.of_type() and then further along \ 
regular mapped relationships would fail as the polymorphic subclass would not \ 
add itself to the load path in a way that could be located by the loader \ 
strategy. A tweak has been made to resolve this scenario.

[orm] [bug]
Repaired a warning in the ORM flush process that was not covered by test \ 
coverage when deleting objects that use the “version_id” feature. This \ 
warning is generally unreachable unless using a dialect that sets the \ 
“supports_sane_rowcount” flag to False, which is not typically the case \ 
however is possible for some MySQL configurations as well as older Firebird \ 
drivers, and likely some third party dialects.

[orm] [bug]
Fixed bug where usage of joined eager loading would not properly wrap the query \ 
inside of a subquery when Query.group_by() were used against the query. When any \ 
kind of result-limiting approach is used, such as DISTINCT, LIMIT, OFFSET, \ 
joined eager loading embeds the row-limited query inside of a subquery so that \ 
the collection results are not impacted. For some reason, the presence of GROUP \ 
BY was never included in this criterion, even though it has a similar effect as \ 
using DISTINCT. Additionally, the bug would prevent using GROUP BY at all for a \ 
joined eager load query for most database platforms which forbid non-aggregated, \ 
non-grouped columns from being in the query, as the additional columns for the \ 
joined eager load would not be accepted by the database.

[orm] [performance]
Identified a performance issue in the system by which a join is constructed \ 
based on a mapped relationship. The clause adaption system would be used for the \ 
majority of join expressions including in the common case where no adaptation is \ 
needed. The conditions under which this adaptation occur have been refined so \ 
that average non-aliased joins along a simple relationship without a \ 
“secondary” table use about 70% less function calls.

[engine] [bug]
Fixed issue where the collection of value processors on a Compiled object would \ 
be mutated when “expanding IN” parameters were used with a datatype that has \ 
bind value processors; in particular, this would mean that when using statement \ 
caching and/or baked queries, the same compiled._bind_processors collection \ 
would be mutated concurrently. Since these processors are the same function for \ 
a given bind parameter namespace every time, there was no actual negative effect \ 
of this issue, however, the execution of a Compiled object should never be \ 
causing any changes in its state, especially given that they are intended to be \ 
thread-safe and reusable once fully constructed.

[sql] [usecase]
A function created using GenericFunction can now specify that the name of the \ 
function should be rendered with or without quotes by assigning the quoted_name \ 
construct to the .name element of the object. Prior to 1.3.4, quoting was never \ 
applied to function names, and some quoting was introduced in 4467 but no means \ 
to force quoting for a mixed case name was available. Additionally, the \ 
quoted_name construct when used as the name will properly register its lowercase \ 
name in the function registry so that the name continues to be available via the \ 
func. registry.

[postgresql] [usecase]
Added support for prefixes to the CTE construct, to allow support for Postgresql \ 
12 “MATERIALIZED” and “NOT MATERIALIZED” phrases. Pull request courtesy \ 
Marat Sharafutdinov.

[postgresql] [bug]
Fixed issue where the PostgreSQL dialect would fail to parse a reflected CHECK \ 
constraint that was a boolean-valued function (as opposed to a boolean-valued \ 

[postgresql] [tests]
Improved detection of two phase transactions requirement for the PostgreSQL \ 
database by testing that max_prepared_transactions is set to a value greater \ 
than 0. Pull request courtesy Federico Caselli.

[mssql] [bug]
Fixed issue where a timezone-aware datetime value being converted to string for \ 
use as a parameter value of a mssql.DATETIMEOFFSET column was omitting the \ 
fractional seconds.

[bug] [ext]
Fixed bug in sqlalchemy.ext.serializer where a unique BindParameter object could \ 
conflict with itself if it were present in the mapping itself, as well as the \ 
filter condition of the query, as one side would be used against the \ 
non-deserialized version and the other side would use the deserialized version. \ 
Logic is added to BindParameter similar to its “clone” method which will \ 
uniquify the parameter name upon deserialize so that it doesn’t conflict with \ 
its original.

[bug] [tests]
Fixed a few test failures which would occur on Windows due to SQLite file \ 
locking issues, as well as some timing issues in connection pool related tests; \ 
pull request courtesy Federico Caselli.


[orm] [bug]
Fixed issue involving lazy="raise" strategy where an ORM delete of an \ 
object would raise for a simple “use-get” style many-to-one relationship \ 
that had lazy=”raise” configured. This is inconsistent vs. the change \ 
introduced in 1.3 as part of 4353, where it was established that a history \ 
operation that does not expect emit SQL should bypass the lazy="raise" \ 
check, and instead effectively treat it as lazy="raise_on_sql" for \ 
this case. The fix adjusts the lazy loader strategy to not raise for the case \ 
where the lazy load was instructed that it should not emit SQL if the object \ 
were not present.

[orm] [bug]
Fixed regression introduced in 1.3.0 related to the association proxy refactor \ 
in 4351 that prevented composite() attributes from working in terms of an \ 
association proxy that references them.

[orm] [bug]
Setting persistence-related flags on relationship() while also setting \ 
viewonly=True will now emit a regular warning, as these flags do not make sense \ 
for a viewonly=True relationship. In particular, the “cascade” settings have \ 
their own warning that is generated based on the individual values, such as \ 
“delete, delete-orphan”, that should not apply to a viewonly relationship. \ 
Note however that in the case of “cascade”, these settings are still \ 
erroneously taking effect even though the relationship is set up as \ 
“viewonly”. In 1.4, all persistence-related cascade settings will be \ 
disallowed on a viewonly=True relationship in order to resolve this issue.

[orm] [bug] [py3k]
Fixed issue where when assigning a collection to itself as a slice, the mutation \ 
operation would fail as it would first erase the assigned collection \ 
inadvertently. As an assignment that does not change the contents should not \ 
generate events, the operation is now a no-op. Note that the fix only applies to \ 
Python 3; in Python 2, the __setitem__ hook isn’t called in this case; \ 
__setslice__ is used instead which recreates the list item-by-item in all cases.

[orm] [bug]
Fixed issue where by if the “begin” of a transaction failed at the Core \ 
engine/connection level, such as due to network error or database is locked for \ 
some transactional recipes, within the context of the Session procuring that \ 
connection from the conneciton pool and then immediately returning it, the ORM \ 
Session would not close the connection despite this connection not being stored \ 
within the state of that Session. This would lead to the connection being \ 
cleaned out by the connection pool weakref handler within garbage collection \ 
which is an unpreferred codepath that in some special configurations can emit \ 
errors in standard error.

[sql] [bug]
Fixed bug where “distinct” keyword passed to select() would not treat a \ 
string value as a “label reference” in the same way that the \ 
select.distinct() does; it would instead raise unconditionally. This keyword \ 
argument and the others passed to select() will ultimately be deprecated for \ 
SQLAlchemy 2.0.

[sql] [bug]
Changed the text of the exception for “Can’t resolve label reference” to \ 
include other kinds of label coercions, namely that “DISTINCT” is also in \ 
this category under the PostgreSQL dialect.

[sqlite] [bug]
Fixed issue to workaround SQLite’s behavior of assigning “numeric” \ 
affinity to JSON datatypes, first described at Support for SQLite JSON Added, \ 
which returns scalar numeric JSON values as a number and not as a string that \ 
can be JSON deserialized. The SQLite-specific JSON deserializer now gracefully \ 
degrades for this case as an exception and bypasses deserialization for single \ 
numeric values, as from a JSON perspective they are already deserialized.

[mssql] [bug]
Repaired support for the mssql.DATETIMEOFFSET datatype on PyODBC, by adding \ 
PyODBC-level result handlers as it does not include native support for this \ 
datatype. This includes usage of the Python 3 “timezone” tzinfo subclass in \ 
order to set up a timezone, which on Python 2 makes use of a minimal backport of \ 
“timezone” in sqlalchemy.util.
   2019-12-03 19:19:58 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.11

Release 1.3.11 has a significant number of bug fixes across all areas as well as \ 
new use case additions. While it is a "point release", it contains a \ 
few use case additions that amount to new features, as they are needed sooner \ 
than the 1.4 series will be ready. This includes new scalar accessors for JSON \ 
index expressions that work across all JSON-supporting backends as well as \ 
cross-dialect support for the "GENERATED ALWAYS AS" SQL construct, \ 
which allows for an automatically updated expression to be established within \ 
DDL in the database server.
   2019-10-10 20:22:49 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-sqlalchemy: updated to 1.3.10



[mssql] [bug]
Fixed bug in SQL Server dialect with new “max_identifier_length” feature \ 
where the mssql dialect already featured this flag, and the implementation did \ 
not accommodate for the new initialization hook correctly.


[oracle] [bug]
Fixed regression in Oracle dialect that was inadvertently using max identifier \ 
length of 128 characters on Oracle server 12.2 and greater even though the \ 
stated contract for the remainder of the 1.3 series is that this value stays at \ 
30 until version SQLAlchemy 1.4. Also repaired issues with the retrieval of the \ 
“compatibility” version, and removed the warning emitted when the \ 
“v$parameter” view was not accessible as this was causing user confusion.



[orm] [bug]
Fixed regression in selectinload loader strategy caused by 4775 (released in \ 
version 1.3.6) where a many-to-one attribute of None would no longer be \ 
populated by the loader. While this was usually not noticeable due to the \ 
lazyloader populating None upon get, it would lead to a detached instance error \ 
if the object were detached.

[orm] [bug]
Passing a plain string expression to Session.query() is deprecated, as all \ 
string coercions were removed in 4481 and this one should have been included. \ 
The literal_column() function may be used to produce a textual column \ 

[orm] [bug]
A warning is emitted for a condition in which the Session may implicitly swap an \ 
object out of the identity map for another one with the same primary key, \ 
detaching the old one, which can be an observed result of load operations which \ 
occur within the SessionEvents.after_flush() hook. The warning is intended to \ 
notify the user that some special condition has caused this to happen and that \ 
the previous object may not be in the expected state.


[engine] [usecase]
Added new create_engine() parameter create_engine.max_identifier_length. This \ 
overrides the dialect-coded “max identifier length” in order to accommodate \ 
for databases that have recently changed this length and the SQLAlchemy dialect \ 
has not yet been adjusted to detect for that version. This parameter interacts \ 
with the existing create_engine.label_length parameter in that it establishes \ 
the maximum (and default) value for anonymously generated labels. Additionally, \ 
post-connection detection of max identifier lengths has been added to the \ 
dialect system. This feature is first being used by the Oracle dialect.


[sql] [bug]
Characters that interfere with “pyformat” or “named” formats in bound \ 
parameters, namely %, (, ) and the space character, as well as a few other \ 
typically undesirable characters, are stripped early for a bindparam() that is \ 
using an anonymized name, which is typically generated automatically from a \ 
named column which itself includes these characters in its name and does not use \ 
a .key, so that they do not interfere either with the SQLAlchemy compiler’s \ 
use of string formatting or with the driver-level parsing of the parameter, both \ 
of which could be demonstrated before the fix. The change only applies to \ 
anonymized parameter names that are generated and consumed internally, not \ 
end-user defined names, so the change should have no impact on any existing \ 
code. Applies in particular to the psycopg2 driver which does not otherwise \ 
quote special parameter names, but also strips leading underscores to suit \ 
Oracle (but not yet leading numbers, as some anon parameters are c
urrently entirely numeric/underscore based); Oracle in any case continues to \ 
quote parameter names that include special characters.

[sql] [usecase]
Added an explicit error message for the case when objects passed to Table are \ 
not SchemaItem objects, rather than resolving to an attribute error.


[sqlite] [usecase]
Added support for sqlite “URI” connections, which allow for sqlite-specific \ 
flags to be passed in the query string such as “read only” for Python \ 
sqlite3 drivers that support this.


[mssql] [bug]
Added identifier quoting to the schema name applied to the “use” statement \ 
which is invoked when a SQL Server multipart schema name is used within a Table \ 
that is being reflected, as well as for Inspector methods such as \ 
Inspector.get_table_names(); this accommodates for special characters or spaces \ 
in the database name. Additionally, the “use” statement is not emitted if \ 
the current database matches the target owner database name being passed.


[oracle] [bug]
Restored adding cx_Oracle.DATETIME to the setinputsizes() call when a SQLAlchemy \ 
Date, DateTime or Time datatype is used, as some complex queries require this to \ 
be present. This was removed in the 1.2 series for arbitrary reasons.

[oracle] [usecase]
The Oracle dialect now emits a warning if Oracle version 12.2 or greater is \ 
used, and the create_engine.max_identifier_length parameter is not set. The \ 
version in this specific case defaults to that of the “compatibility” \ 
version set in the Oracle server configuration, not the actual server version. \ 
In version 1.4, the default max_identifier_length for 12.2 or greater will move \ 
to 128 characters. In order to maintain forwards compatibility, applications \ 
should set create_engine.max_identifier_length to 30 in order to maintain the \ 
same length behavior, or to 128 in order to test the upcoming behavior. This \ 
length determines among other things how generated constraint names are \ 
truncated for statements like CREATE CONSTRAINT and DROP CONSTRAINT, which means \ 
a the new length may produce a name-mismatch against a name that was generated \ 
with the old length, impacting database migrations.


[bug] [tests]
Fixed unit test regression released in 1.3.8 that would cause failure for \ 
Oracle, SQL Server and other non-native ENUM platforms due to new enumeration \ 
tests added as part of 4285 enum sortability in the unit of work; the \ 
enumerations created constraints that were duplicated on name.