Опубликовано 4 марта 2024 г. 18:00 by Xadmin просмотров: 153
Теперь доступна SQLAlchemy 2.0.28.
Релиз 2.0.28 включает в себя два исправления регрессии, связанные с ORM, одно из которых - регресс производительности в отношении параметров "критериев" ORM, таких как конструкция with_expression(), а также при добавлении критериев WHERE в параметры загрузчика, такие как selectinload(). Подход к замене значительно проще и может иметь заметный эффект для приложений, которые сталкиваются с этим конкретным путем к коду / сценарием.
Ссылки на подробный список изменений для версии 2.0.28 находятся в Changelog.
SQLAlchemy 2.0.28 доступна на Download Page.
2.0.28
Released: March 4, 2024
orm
-
[orm] [bug] [regression]
Fixed regression caused by #9779 where using the “secondary” table in a relationship
and_()
expression would fail to be aliased to match how the “secondary” table normally renders within aSelect.join()
expression, leading to an invalid query.References: #11010
-
[orm] [bug] [performance] [regression]
Adjusted the fix made in #10570, released in 2.0.23, where new logic was added to reconcile possibly changing bound parameter values across cache key generations used within the
with_expression()
construct. The new logic changes the approach by which the new bound parameter values are associated with the statement, avoiding the need to deep-copy the statement which can result in a significant performance penalty for very deep / complex SQL constructs. The new approach no longer requires this deep-copy step.References: #11085
engine
-
[engine] [usecase]
Added new core execution option
Connection.execution_options.preserve_rowcount
. When set, thecursor.rowcount
attribute from the DBAPI cursor will be unconditionally memoized at statement execution time, so that whatever value the DBAPI offers for any kind of statement will be available using theCursorResult.rowcount
attribute from theCursorResult
. This allows the rowcount to be accessed for statments such as INSERT and SELECT, to the degree supported by the DBAPI in use. The “Insert Many Values” Behavior for INSERT statements also supports this option and will ensureCursorResult.rowcount
is correctly set for a bulk INSERT of rows when set.References: #10974
asyncio
-
[asyncio] [bug]
An error is raised if a
QueuePool
or other non-asyncio pool class is passed tocreate_async_engine()
. This engine only accepts asyncio-compatible pool classes includingAsyncAdaptedQueuePool
. Other pool classes such asNullPool
are compatible with both synchronous and asynchronous engines as they do not perform any locking.References: #8771
tests
-
[tests] [change]
pytest support in the tox.ini file has been updated to support pytest 8.1.