Changelog
### 1.3.21
```
:released: December 17, 2020
.. change::
:tags: bug, orm
:tickets: 5774
:versions: 1.4.0b2
Added a comprehensive check and an informative error message for the case
where a mapped class, or a string mapped class name, is passed to
:paramref:`_orm.relationship.secondary`. This is an extremely common error
which warrants a clear message.
Additionally, added a new rule to the class registry resolution such that
with regards to the :paramref:`_orm.relationship.secondary` parameter, if a
mapped class and its table are of the identical string name, the
:class:`.Table` will be favored when resolving this parameter. In all
other cases, the class continues to be favored if a class and table
share the identical name.
.. change::
:tags: sqlite, usecase
:tickets: 5685
Added ``sqlite_with_rowid=False`` dialect keyword to enable creating
tables as ``CREATE TABLE … WITHOUT ROWID``. Patch courtesy Sean Anderson.
.. change::
:tags: bug, sql
:tickets: 5691
A warning is emmitted if a returning() method such as
:meth:`_sql.Insert.returning` is called multiple times, as this does not
yet support additive operation. Version 1.4 will support additive
operation for this. Additionally, any combination of the
:meth:`_sql.Insert.returning` and :meth:`_sql.ValuesBase.return_defaults`
methods now raises an error as these methods are mutually exclusive;
previously the operation would fail silently.
.. change::
:tags: bug, mssql
:tickets: 5751
Fixed bug where a CREATE INDEX statement was rendered incorrectly when
both ``mssql-include`` and ``mssql_where`` were specified. Pull request
courtesy Adiorz.
.. change::
:tags: bug, postgresql, mysql
:tickets: 5729
:versions: 1.4.0b2
Fixed regression introduced in 1.3.2 for the PostgreSQL dialect, also
copied out to the MySQL dialect's feature in 1.3.18, where usage of a non
:class:`_schema.Table` construct such as :func:`_sql.text` as the argument
to :paramref:`_sql.Select.with_for_update.of` would fail to be accommodated
correctly within the PostgreSQL or MySQL compilers.
.. change::
:tags: bug, mssql
:tickets: 5646
Added SQL Server code "01000" to the list of disconnect codes.
.. change::
:tags: usecase, postgresql
:tickets: 5604
:versions: 1.4.0b2
Added new parameter :paramref:`_postgresql.ExcludeConstraint.ops` to the
:class:`_postgresql.ExcludeConstraint` object, to support operator class
specification with this constraint. Pull request courtesy Alon Menczer.
.. change::
:tags: bug, mysql, reflection
:tickets: 5744
:versions: 1.4.0b2
Fixed issue where reflecting a server default on MariaDB only that
contained a decimal point in the value would fail to be reflected
correctly, leading towards a reflected table that lacked any server
default.
.. change::
:tags: bug, orm
:tickets: 5664
Fixed bug in :meth:`_query.Query.update` where objects in the
:class:`_ormsession.Session` that were already expired would be
unnecessarily SELECTed individually when they were refreshed by the
"evaluate"synchronize strategy.
.. change::
:tags: usecase, oracle
:tickets: 5755
Implemented support for the SERIALIZABLE isolation level for Oracle
databases, as well as a real implementation for
:meth:`_engine.Connection.get_isolation_level`.
.. seealso::
:ref:`oracle_isolation_level`
.. change::
:tags: mysql, sql
:tickets: 5696
Added missing keywords to the ``RESERVED_WORDS`` list for the MySQL
dialect: ``action``, ``level``, ``mode``, ``status``, ``text``, ``time``.
Pull request courtesy Oscar Batori.
.. change::
:tags: bug, orm
:tickets: 5737
:versions: 1.4.0b2
Fixed bug involving the ``restore_load_context`` option of ORM events such
as :meth:`_ormevent.InstanceEvents.load` such that the flag would not be
carried along to subclasses which were mapped after the event handler were
first established.
.. change::
:tags: bug, sql
:tickets: 5656
Fixed structural compiler issue where some constructs such as MySQL /
PostgreSQL "on conflict / on duplicate key" would rely upon the state of
the :class:`_sql.Compiler` object being fixed against their statement as
the top level statement, which would fail in cases where those statements
are branched from a different context, such as a DDL construct linked to a
SQL statement.
.. change::
:tags: mssql, sqlite, reflection
:tickets: 5661
Fixed issue with composite primary key columns not being reported
in the correct order. Patch courtesy fulpm.
.. changelog::
```
### 1.3.20
```
:released: October 12, 2020
.. change::
:tags: bug, orm
:tickets: 4428
An :class:`.ArgumentError` with more detail is now raised if the target
parameter for :meth:`_query.Query.join` is set to an unmapped object.
Prior to this change a less detailed ``AttributeError`` was raised.
Pull request courtesy Ramon Williams.
.. change::
:tags: bug, mysql
:tickets: 5568
The "skip_locked" keyword used with ``with_for_update()`` will emit a
warning when used on MariaDB backends, and will then be ignored. This is
a deprecated behavior that will raise in SQLAlchemy 1.4, as an application
that requests "skip locked" is looking for a non-blocking operation which
is not available on those backends.
.. change::
:tags: bug, engine
:tickets: 5599
Fixed issue where a non-string object sent to
:class:`_exc.SQLAlchemyError` or a subclass, as occurs with some third
party dialects, would fail to stringify correctly. Pull request
courtesy Andrzej Bartosiński.
.. change::
:tags: bug, sql
:tickets: 5644
Fixed issue where the ``pickle.dumps()`` operation against
:class:`_expression.Over` construct would produce a recursion overflow.
.. change::
:tags: postgresql, usecase
:tickets: 4392
The psycopg2 dialect now support PostgreSQL multiple host connections, by
passing host/port combinations to the query string. Pull request courtesy
Ramon Williams.
.. seealso::
:ref:`psycopg2_multi_host`
.. change::
:tags: bug, mysql
:tickets: 5617
Fixed bug where an UPDATE statement against a JOIN using MySQL multi-table
format would fail to include the table prefix for the target table if the
statement had no WHERE clause, as only the WHERE clause were scanned to
detect a "multi table update" at that particular point. The target
is now also scanned if it's a JOIN to get the leftmost table as the
primary table and the additional entries as additional FROM entries.
.. change::
:tags: bug, postgresql
:tickets: 5518
Adjusted the :meth:`_types.ARRAY.Comparator.any` and
:meth:`_types.ARRAY.Comparator.all` methods to implement a straight "NOT"
operation for negation, rather than negating the comparison operator.
.. change::
:tags: bug, pool
:tickets: 5582
Fixed issue where the following pool parameters were not being propagated
to the new pool created when :meth:`_engine.Engine.dispose` were called:
``pre_ping``, ``use_lifo``. Additionally the ``recycle`` and
``reset_on_return`` parameter is now propagated for the
:class:`_engine.AssertionPool` class.
.. change::
:tags: bug, ext, associationproxy
:tickets: 5541, 5542
An informative error is now raised when attempting to use an association
proxy element as a plain column expression to be SELECTed from or used in a
SQL function; this use case is not currently supported.
.. change::
:tags: bug, sql
:tickets: 5618
Fixed bug where an error was not raised in the case where a
:func:`_sql.column` were added to more than one :func:`_sql.table` at a
time. This raised correctly for the :class:`_schema.Column` and
:class:`_schema.Table` objects. An :class:`_exc.ArgumentError` is now
raised when this occurs.
.. change::
:tags: bug, orm
:tickets: 4589
Fixed issue where using a loader option against a string attribute name
that is not actually a mapped attribute, such as a plain Python descriptor,
would raise an uninformative AttributeError; a descriptive error is now
raised.
.. change::
:tags: mysql, usecase
:tickets: 5462
Adjusted the MySQL dialect to correctly parenthesize functional index
expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams.
.. change::
:tags: bug, engine
:tickets: 5632
Repaired a function-level import that was not using SQLAlchemy's standard
late-import system within the sqlalchemy.exc module.
.. change::
:tags: change, mysql
:tickets: 5539
Add new MySQL reserved words: ``cube``, ``lateral`` added in MySQL 8.0.1
and 8.0.14, respectively; this indicates that these terms will be quoted if
used as table or column identifier names.
.. change::
:tags: bug, mssql
:tickets: 5592
Fixed issue where a SQLAlchemy connection URI for Azure DW with
``authentication=ActiveDirectoryIntegrated`` (and no username+password)
was not constructing the ODBC connection string in a way that was
acceptable to the Azure DW instance.
.. change::
:tags: bug, postgresql
:tickets: 5520
Fixed issue where the :class:`_postgresql.ENUM` type would not consult the
schema translate map when emitting a CREATE TYPE or DROP TYPE during the
test to see if the type exists or not. Additionally, repaired an issue
where if the same enum were encountered multiple times in a single DDL
sequence, the "check" query would run repeatedly rather than relying upon a
cached value.
.. change::
:tags: bug, tests
:tickets: 5635
Fixed incompatibilities in the test suite when running against Pytest 6.x.
.. changelog::
```
### 1.3.19
```
:released: August 17, 2020
.. change::
:tags: usecase, py3k
:tickets: 5357
Added a ``**kw`` argument to the :meth:`.DeclarativeMeta.__init__` method.
This allows a class to support the :pep:`487` metaclass hook
``__init_subclass__``. Pull request courtesy Ewen Gillies.
.. change::
:tags: bug, sql
:tickets: 5470
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.
.. change::
:tags: usecase, mysql
:tickets: 5481
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.
.. change::
:tags: bug, mssql, sql
:tickets: 5467
Fixed bug where the mssql dialect incorrectly escaped object names that
contained ']' character(s).
.. change::
:tags: bug, reflection, sqlite, mssql
:tickets: 5456
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 :class:`.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 repaired.
.. change::
:tags: bug, mysql
:tickets: 5411
Fixed an issue where CREATE TABLE statements were not specifying the
COLLATE keyword correctly.
.. change::
:tags: bug, datatypes, sql
:tickets: 4733
The ``LookupError`` message will now provide the user with up to four
possible values that a column is constrained to via the :class:`.Enum`.
Values longer than 11 characters will be truncated and replaced with
ellipses. Pull request courtesy Ramon Williams.
.. change::
:tags: bug, postgresql
:tickets: 5476
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
:class:`.TypeDecorator` that defined result-processing behavior were in
use. Pull request courtesy Jim Bosch.
.. change::
:tags: bug, mysql
:tickets: 5493
Added MariaDB code 1927 to the list of "disconnect" codes, as recent
MariaDB versions apparently use this code when the database server was
stopped.
.. change::
:tags: usecase, declarative, orm
:tickets: 5513
The name of the virtual column used when using the
:class:`_declarative.AbstractConcreteBase` and
:class:`_declarative.ConcreteBase` classes can now be customized, to allow
for models that have a column that is actually named ``type``. Pull
request courtesy Jesse-Bakker.
.. change::
:tags: usecase, orm
:tickets: 5494
Adjusted the workings of the :meth:`_orm.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.
.. change::
:tags: bug, sql
:tickets: 5500
Fixed issue where the
:paramref:`_engine.Connection.execution_options.schema_translate_map`
feature would not take effect when the :meth:`_schema.Sequence.next_value`
function function for a :class:`_schema.Sequence` were used in the
:paramref:`_schema.Column.server_default` parameter and the create table
DDL were emitted.
.. changelog::
```
Links
- PyPI: https://pypi.org/project/sqlalchemy
- Changelog: https://pyup.io/changelogs/sqlalchemy/
- Homepage: http://www.sqlalchemy.org
This PR updates SQLAlchemy from 1.3.18 to 1.3.21.
Changelog
### 1.3.21 ``` :released: December 17, 2020 .. change:: :tags: bug, orm :tickets: 5774 :versions: 1.4.0b2 Added a comprehensive check and an informative error message for the case where a mapped class, or a string mapped class name, is passed to :paramref:`_orm.relationship.secondary`. This is an extremely common error which warrants a clear message. Additionally, added a new rule to the class registry resolution such that with regards to the :paramref:`_orm.relationship.secondary` parameter, if a mapped class and its table are of the identical string name, the :class:`.Table` will be favored when resolving this parameter. In all other cases, the class continues to be favored if a class and table share the identical name. .. change:: :tags: sqlite, usecase :tickets: 5685 Added ``sqlite_with_rowid=False`` dialect keyword to enable creating tables as ``CREATE TABLE … WITHOUT ROWID``. Patch courtesy Sean Anderson. .. change:: :tags: bug, sql :tickets: 5691 A warning is emmitted if a returning() method such as :meth:`_sql.Insert.returning` is called multiple times, as this does not yet support additive operation. Version 1.4 will support additive operation for this. Additionally, any combination of the :meth:`_sql.Insert.returning` and :meth:`_sql.ValuesBase.return_defaults` methods now raises an error as these methods are mutually exclusive; previously the operation would fail silently. .. change:: :tags: bug, mssql :tickets: 5751 Fixed bug where a CREATE INDEX statement was rendered incorrectly when both ``mssql-include`` and ``mssql_where`` were specified. Pull request courtesy Adiorz. .. change:: :tags: bug, postgresql, mysql :tickets: 5729 :versions: 1.4.0b2 Fixed regression introduced in 1.3.2 for the PostgreSQL dialect, also copied out to the MySQL dialect's feature in 1.3.18, where usage of a non :class:`_schema.Table` construct such as :func:`_sql.text` as the argument to :paramref:`_sql.Select.with_for_update.of` would fail to be accommodated correctly within the PostgreSQL or MySQL compilers. .. change:: :tags: bug, mssql :tickets: 5646 Added SQL Server code "01000" to the list of disconnect codes. .. change:: :tags: usecase, postgresql :tickets: 5604 :versions: 1.4.0b2 Added new parameter :paramref:`_postgresql.ExcludeConstraint.ops` to the :class:`_postgresql.ExcludeConstraint` object, to support operator class specification with this constraint. Pull request courtesy Alon Menczer. .. change:: :tags: bug, mysql, reflection :tickets: 5744 :versions: 1.4.0b2 Fixed issue where reflecting a server default on MariaDB only that contained a decimal point in the value would fail to be reflected correctly, leading towards a reflected table that lacked any server default. .. change:: :tags: bug, orm :tickets: 5664 Fixed bug in :meth:`_query.Query.update` where objects in the :class:`_ormsession.Session` that were already expired would be unnecessarily SELECTed individually when they were refreshed by the "evaluate"synchronize strategy. .. change:: :tags: usecase, oracle :tickets: 5755 Implemented support for the SERIALIZABLE isolation level for Oracle databases, as well as a real implementation for :meth:`_engine.Connection.get_isolation_level`. .. seealso:: :ref:`oracle_isolation_level` .. change:: :tags: mysql, sql :tickets: 5696 Added missing keywords to the ``RESERVED_WORDS`` list for the MySQL dialect: ``action``, ``level``, ``mode``, ``status``, ``text``, ``time``. Pull request courtesy Oscar Batori. .. change:: :tags: bug, orm :tickets: 5737 :versions: 1.4.0b2 Fixed bug involving the ``restore_load_context`` option of ORM events such as :meth:`_ormevent.InstanceEvents.load` such that the flag would not be carried along to subclasses which were mapped after the event handler were first established. .. change:: :tags: bug, sql :tickets: 5656 Fixed structural compiler issue where some constructs such as MySQL / PostgreSQL "on conflict / on duplicate key" would rely upon the state of the :class:`_sql.Compiler` object being fixed against their statement as the top level statement, which would fail in cases where those statements are branched from a different context, such as a DDL construct linked to a SQL statement. .. change:: :tags: mssql, sqlite, reflection :tickets: 5661 Fixed issue with composite primary key columns not being reported in the correct order. Patch courtesy fulpm. .. changelog:: ``` ### 1.3.20 ``` :released: October 12, 2020 .. change:: :tags: bug, orm :tickets: 4428 An :class:`.ArgumentError` with more detail is now raised if the target parameter for :meth:`_query.Query.join` is set to an unmapped object. Prior to this change a less detailed ``AttributeError`` was raised. Pull request courtesy Ramon Williams. .. change:: :tags: bug, mysql :tickets: 5568 The "skip_locked" keyword used with ``with_for_update()`` will emit a warning when used on MariaDB backends, and will then be ignored. This is a deprecated behavior that will raise in SQLAlchemy 1.4, as an application that requests "skip locked" is looking for a non-blocking operation which is not available on those backends. .. change:: :tags: bug, engine :tickets: 5599 Fixed issue where a non-string object sent to :class:`_exc.SQLAlchemyError` or a subclass, as occurs with some third party dialects, would fail to stringify correctly. Pull request courtesy Andrzej Bartosiński. .. change:: :tags: bug, sql :tickets: 5644 Fixed issue where the ``pickle.dumps()`` operation against :class:`_expression.Over` construct would produce a recursion overflow. .. change:: :tags: postgresql, usecase :tickets: 4392 The psycopg2 dialect now support PostgreSQL multiple host connections, by passing host/port combinations to the query string. Pull request courtesy Ramon Williams. .. seealso:: :ref:`psycopg2_multi_host` .. change:: :tags: bug, mysql :tickets: 5617 Fixed bug where an UPDATE statement against a JOIN using MySQL multi-table format would fail to include the table prefix for the target table if the statement had no WHERE clause, as only the WHERE clause were scanned to detect a "multi table update" at that particular point. The target is now also scanned if it's a JOIN to get the leftmost table as the primary table and the additional entries as additional FROM entries. .. change:: :tags: bug, postgresql :tickets: 5518 Adjusted the :meth:`_types.ARRAY.Comparator.any` and :meth:`_types.ARRAY.Comparator.all` methods to implement a straight "NOT" operation for negation, rather than negating the comparison operator. .. change:: :tags: bug, pool :tickets: 5582 Fixed issue where the following pool parameters were not being propagated to the new pool created when :meth:`_engine.Engine.dispose` were called: ``pre_ping``, ``use_lifo``. Additionally the ``recycle`` and ``reset_on_return`` parameter is now propagated for the :class:`_engine.AssertionPool` class. .. change:: :tags: bug, ext, associationproxy :tickets: 5541, 5542 An informative error is now raised when attempting to use an association proxy element as a plain column expression to be SELECTed from or used in a SQL function; this use case is not currently supported. .. change:: :tags: bug, sql :tickets: 5618 Fixed bug where an error was not raised in the case where a :func:`_sql.column` were added to more than one :func:`_sql.table` at a time. This raised correctly for the :class:`_schema.Column` and :class:`_schema.Table` objects. An :class:`_exc.ArgumentError` is now raised when this occurs. .. change:: :tags: bug, orm :tickets: 4589 Fixed issue where using a loader option against a string attribute name that is not actually a mapped attribute, such as a plain Python descriptor, would raise an uninformative AttributeError; a descriptive error is now raised. .. change:: :tags: mysql, usecase :tickets: 5462 Adjusted the MySQL dialect to correctly parenthesize functional index expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams. .. change:: :tags: bug, engine :tickets: 5632 Repaired a function-level import that was not using SQLAlchemy's standard late-import system within the sqlalchemy.exc module. .. change:: :tags: change, mysql :tickets: 5539 Add new MySQL reserved words: ``cube``, ``lateral`` added in MySQL 8.0.1 and 8.0.14, respectively; this indicates that these terms will be quoted if used as table or column identifier names. .. change:: :tags: bug, mssql :tickets: 5592 Fixed issue where a SQLAlchemy connection URI for Azure DW with ``authentication=ActiveDirectoryIntegrated`` (and no username+password) was not constructing the ODBC connection string in a way that was acceptable to the Azure DW instance. .. change:: :tags: bug, postgresql :tickets: 5520 Fixed issue where the :class:`_postgresql.ENUM` type would not consult the schema translate map when emitting a CREATE TYPE or DROP TYPE during the test to see if the type exists or not. Additionally, repaired an issue where if the same enum were encountered multiple times in a single DDL sequence, the "check" query would run repeatedly rather than relying upon a cached value. .. change:: :tags: bug, tests :tickets: 5635 Fixed incompatibilities in the test suite when running against Pytest 6.x. .. changelog:: ``` ### 1.3.19 ``` :released: August 17, 2020 .. change:: :tags: usecase, py3k :tickets: 5357 Added a ``**kw`` argument to the :meth:`.DeclarativeMeta.__init__` method. This allows a class to support the :pep:`487` metaclass hook ``__init_subclass__``. Pull request courtesy Ewen Gillies. .. change:: :tags: bug, sql :tickets: 5470 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. .. change:: :tags: usecase, mysql :tickets: 5481 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. .. change:: :tags: bug, mssql, sql :tickets: 5467 Fixed bug where the mssql dialect incorrectly escaped object names that contained ']' character(s). .. change:: :tags: bug, reflection, sqlite, mssql :tickets: 5456 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 :class:`.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 repaired. .. change:: :tags: bug, mysql :tickets: 5411 Fixed an issue where CREATE TABLE statements were not specifying the COLLATE keyword correctly. .. change:: :tags: bug, datatypes, sql :tickets: 4733 The ``LookupError`` message will now provide the user with up to four possible values that a column is constrained to via the :class:`.Enum`. Values longer than 11 characters will be truncated and replaced with ellipses. Pull request courtesy Ramon Williams. .. change:: :tags: bug, postgresql :tickets: 5476 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 :class:`.TypeDecorator` that defined result-processing behavior were in use. Pull request courtesy Jim Bosch. .. change:: :tags: bug, mysql :tickets: 5493 Added MariaDB code 1927 to the list of "disconnect" codes, as recent MariaDB versions apparently use this code when the database server was stopped. .. change:: :tags: usecase, declarative, orm :tickets: 5513 The name of the virtual column used when using the :class:`_declarative.AbstractConcreteBase` and :class:`_declarative.ConcreteBase` classes can now be customized, to allow for models that have a column that is actually named ``type``. Pull request courtesy Jesse-Bakker. .. change:: :tags: usecase, orm :tickets: 5494 Adjusted the workings of the :meth:`_orm.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. .. change:: :tags: bug, sql :tickets: 5500 Fixed issue where the :paramref:`_engine.Connection.execution_options.schema_translate_map` feature would not take effect when the :meth:`_schema.Sequence.next_value` function function for a :class:`_schema.Sequence` were used in the :paramref:`_schema.Column.server_default` parameter and the create table DDL were emitted. .. changelog:: ```Links
- PyPI: https://pypi.org/project/sqlalchemy - Changelog: https://pyup.io/changelogs/sqlalchemy/ - Homepage: http://www.sqlalchemy.org