github sqlalchemy/sqlalchemy rel_1_3_8


Released: August 27, 2019

  • [bug] [orm] Fixed bug where Load objects were not pickleable due to
    mapper/relationship state in the internal context dictionary. These
    objects are now converted to picklable using similar techniques as that of
    other elements within the loader option system that have long been

    References: #4823

  • [bug] [postgresql] Revised the approach for the just added support for the psycopg2
    "execute_values()" feature added in 1.3.7 for #4623. The approach
    relied upon a regular expression that would fail to match for a more
    complex INSERT statement such as one which had subqueries involved. The
    new approach matches exactly the string that was rendered as the VALUES

    References: #4623

  • [orm] [usecase] Added support for the use of an Enum datatype using Python
    pep-435 enumeration objects as values for use as a primary key column
    mapped by the ORM. As these values are not inherently sortable, as
    required by the ORM for primary keys, a new
    TypeEngine.sort_key_function attribute is added to the typing
    system which allows any SQL type to implement a sorting for Python objects
    of its type which is consulted by the unit of work. The Enum
    type then defines this using the database value of a given enumeration.
    The sorting scheme can be also be redefined by passing a callable to the
    Enum.sort_key_function parameter. Pull request courtesy
    Nicolas Caniart.

    References: #4285

  • [bug] [engine] Fixed an issue whereby if the dialect "initialize" process which occurs on
    first connect would encounter an unexpected exception, the initialize
    process would fail to complete and then no longer attempt on subsequent
    connection attempts, leaving the dialect in an un-initialized, or partially
    initialized state, within the scope of parameters that need to be
    established based on inspection of a live connection. The "invoke once"
    logic in the event system has been reworked to accommodate for this
    occurrence using new, private API features that establish an "exec once"
    hook that will continue to allow the initializer to fire off on subsequent
    connections, until it completes without raising an exception. This does not
    impact the behavior of the existing once=True flag within the event

    References: #4807

  • [bug] [reflection] [sqlite] Fixed bug where a FOREIGN KEY that was set up to refer to the parent table
    by table name only without the column names would not correctly be
    reflected as far as setting up the "referred columns", since SQLite's
    PRAGMA does not report on these columns if they weren't given explicitly.
    For some reason this was harcoded to assume the name of the local column,
    which might work for some cases but is not correct. The new approach
    reflects the primary key of the referred table and uses the constraint
    columns list as the referred columns list, if the remote column(s) aren't
    present in the reflected pragma directly.

    References: #4810

  • [bug] [postgresql] Fixed bug where Postgresql operators such as
    postgresql.ARRAY.Comparator.contains() and
    postgresql.ARRAY.Comparator.contained_by() would fail to function
    correctly for non-integer values when used against a
    postgresql.array object, due to an erroneous assert statement.

    References: #4822

  • [engine] [feature] Added new parameter create_engine.hide_parameters which when
    set to True will cause SQL parameters to no longer be logged, nor rendered
    in the string representation of a StatementError object.

    References: #4815

  • [postgresql] [usecase] Added support for reflection of CHECK constraints that include the special
    PostgreSQL qualifier "NOT VALID", which can be present for CHECK
    constraints that were added to an exsiting table with the directive that
    they not be applied to existing data in the table. The PostgreSQL
    dictionary for CHECK constraints as returned by
    Inspector.get_check_constraints() may include an additional entry
    dialect_options which within will contain an entry "not_valid": True if this symbol is detected. Pull request courtesy Bill Finn.

    References: #4824

latest releases: rel_1_3_20, rel_1_3_19, rel_1_3_18...
14 months ago