github sqlalchemy/sqlalchemy rel_1_4_32
1.4.32

latest releases: rel_2_0_30, rel_2_0_29, rel_2_0_28...
2 years ago

1.4.32

Released: March 6, 2022

orm

  • [orm] [bug] [regression] Fixed regression where the ORM exception that is to be raised when an
    INSERT silently fails to actually insert a row (such as from a trigger)
    would not be reached, due to a runtime exception raised ahead of time due
    to the missing primary key value, thus raising an uninformative exception
    rather than the correct one. For 1.4 and above, a new
    _ormexc.FlushError is added for this case that's raised earlier
    than the previous "null identity" exception was for 1.3, as a situation
    where the number of rows actually INSERTed does not match what was expected
    is a more critical situation in 1.4 as it prevents batching of multiple
    objects from working correctly. This is separate from the case where a
    newly fetched primary key is fetched as NULL, which continues to raise the
    existing "null identity" exception.

    References: #7594

  • [orm] [bug] Fixed issue where using a fully qualified path for the classname in
    _orm.relationship() that nonetheless contained an incorrect name for
    path tokens that were not the first token, would fail to raise an
    informative error and would instead fail randomly at a later step.

    References: #7697

engine

  • [engine] [bug] Adjusted the logging for key SQLAlchemy components including
    _engine.Engine, _engine.Connection to establish an
    appropriate stack level parameter, so that the Python logging tokens
    funcName and lineno when used in custom logging formatters will
    report the correct information, which can be useful when filtering log
    output; supported on Python 3.8 and above. Pull request courtesy Markus
    Gerstel.

    References: #7612

sql

  • [sql] [bug] Fixed type-related error messages that would fail for values that were
    tuples, due to string formatting syntax, including compile of unsupported
    literal values and invalid boolean values.

    References: #7721

  • [sql] [bug] [mysql] Fixed issues in MySQL _mysql.SET datatype as well as the generic
    Enum datatype where the __repr__() method would not render
    all optional parameters in the string output, impacting the use of these
    types in Alembic autogenerate. Pull request for MySQL courtesy Yuki
    Nishimine.

    References: #7598, #7720, #7789

  • [sql] [bug] The _sqltypes.Enum datatype now emits a warning if the
    _sqltypes.Enum.length argument is specified without also
    specifying _sqltypes.Enum.native_enum as False, as the
    parameter is otherwise silently ignored in this case, despite the fact that
    the _sqltypes.Enum datatype will still render VARCHAR DDL on
    backends that don't have a native ENUM datatype such as SQLite. This
    behavior may change in a future release so that "length" is honored for all
    non-native "enum" types regardless of the "native_enum" setting.

  • [sql] [bug] Fixed issue where the HasCTE.add_cte() method as called upon a
    TextualSelect instance was not being accommodated by the SQL
    compiler. The fix additionally adds more "SELECT"-like compiler behavior to
    TextualSelect including that DML CTEs such as UPDATE and INSERT
    may be accommodated.

    References: #7760

asyncio

  • [asyncio] [bug] Fixed issues where a descriptive error message was not raised for some
    classes of event listening with an async engine, which should instead be a
    sync engine instance.

  • [asyncio] [bug] Fixed issue where the _asyncio.AsyncSession.execute() method failed
    to raise an informative exception if the
    _engine.Connection.execution_options.stream_results execution
    option were used, which is incompatible with a sync-style
    _result.Result object when using an asyncio calling style, as the
    operation to fetch more rows would need to be awaited. An exception is now
    raised in this scenario in the same way one was already raised when the
    _engine.Connection.execution_options.stream_results option
    would be used with the _asyncio.AsyncConnection.execute() method.

    Additionally, for improved stability with state-sensitive database drivers
    such as asyncmy, the cursor is now closed when this error condition is
    raised; previously with the asyncmy dialect, the connection would go into
    an invalid state with unconsumed server side results remaining.

    References: #7667

postgresql

  • [postgresql] [usecase] Added compiler support for the PostgreSQL NOT VALID phrase when rendering
    DDL for the CheckConstraint, ForeignKeyConstraint
    and ForeignKey schema constructs. Pull request courtesy
    Gilbert Gilb's.

    References: #7600

mysql

  • [mysql] [bug] [regression] Fixed regression caused by #7518 where changing the syntax "SHOW
    VARIABLES" to "SELECT @@" broke compatibility with MySQL versions older
    than 5.6, including early 5.0 releases. While these are very old MySQL
    versions, a change in compatibility was not planned, so version-specific
    logic has been restored to fall back to "SHOW VARIABLES" for MySQL server
    versions < 5.6.

    References: #7518

mariadb

  • [mariadb] [bug] [regression] Fixed regression in mariadbconnector dialect as of mariadb connector 1.0.10
    where the DBAPI no longer pre-buffers cursor.lastrowid, leading to errors
    when inserting objects with the ORM as well as causing non-availability of
    the _result.CursorResult.inserted_primary_key attribute. The
    dialect now fetches this value proactively for situations where it applies.

    References: #7738

sqlite

  • [sqlite] [usecase] Added support for reflecting SQLite inline unique constraints where
    the column names are formatted with SQLite "escape quotes" []
    or ```, which are discarded by the database when producing the
    column name.

    References: #7736

  • [sqlite] [bug] Fixed issue where SQLite unique constraint reflection would fail to detect
    a column-inline UNIQUE constraint where the column name had an underscore
    in its name.

    References: #7736

oracle

  • [oracle] [bug] Fixed issue in Oracle dialect where using a column name that requires
    quoting when written as a bound parameter, such as "_id", would not
    correctly track a Python generated default value due to the bound-parameter
    rewriting missing this value, causing an Oracle error to be raised.

    References: #7676

  • [oracle] [bug] [regression] Added support to parse "DPI" error codes from cx_Oracle exception objects
    such as DPI-1080 and DPI-1010, both of which now indicate a
    disconnect scenario as of cx_Oracle 8.3.

    References: #7748

tests

  • [tests] [bug] Improvements to the test suite's integration with pytest such that the
    "warnings" plugin, if manually enabled, will not interfere with the test
    suite, such that third parties can enable the warnings plugin or make use
    of the -W parameter and SQLAlchemy's test suite will continue to pass.
    Additionally, modernized the detection of the "pytest-xdist" plugin so that
    plugins can be globally disabled using PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
    without breaking the test suite if xdist were still installed. Warning
    filters that promote deprecation warnings to errors are now localized to
    SQLAlchemy-specific warnings, or within SQLAlchemy-specific sources for
    general Python deprecation warnings, so that non-SQLAlchemy deprecation
    warnings emitted from pytest plugins should also not impact the test suite.

    References: #7599

  • [tests] [bug] Made corrections to the default pytest configuration regarding how test
    discovery is configured, to fix issue where the test suite would not
    configure warnings correctly and also attempt to load example suites as
    tests, in the specific case where the SQLAlchemy checkout were located in
    an absolute path that had a super-directory named "test".

    References: #7045

Don't miss a new sqlalchemy release

NewReleases is sending notifications on new releases.