Releases: sqlalchemy/alembic
1.7.4
1.7.4
Released: October 6, 2021
bug
-
[bug] [regression] Fixed a regression that prevented the use of post write hooks
on python version lower than 3.9References: #934
-
[bug] [environment] Fixed issue where the
MigrationContext.autocommit_block()
feature
would fail to function when using a SQLAlchemy engine using 2.0 future
mode.References: #944
1.7.3
1.7.2
1.7.2
Released: September 17, 2021
bug
-
[bug] [typing] Added missing attributes from context stubs.
References: #900
-
[bug] [mypy] Fixed an import in one of the .pyi files that was triggering an
assertion error in some versions of mypy.References: #897
-
[bug] [ops] [regression] Fixed issue where registration of custom ops was prone to failure due to
the registration process runningexec()
on generated code that as of
the 1.7 series includes pep-484 annotations, which in the case of end user
code would result in name resolution errors when the exec occurs. The logic
in question has been altered so that the annotations are rendered as
forward references so that theexec()
can proceed.References: #920
1.7.1
1.7.1
Released: August 30, 2021
bug
-
[bug] [installation] Corrected "universal wheel" directive in setup.cfg so that building a wheel
does not target Python 2. The PyPi files index for 1.7.0 was corrected
manually. Pull request courtesy layday.References: #893
-
[bug] [pep484] Fixed issue in generated .pyi files where default values for
Optional
arguments were missing, thereby causing mypy to consider them as required.References: #895
-
[bug] [batch] [regression] Fixed regression in batch mode due to #883 where the "auto" mode
of batch would fail to accommodate any additional migration directives
beyond encountering anadd_column()
directive, due to a mis-application
of the conditional logic that was added as part of this change, leading to
"recreate" mode not being used in cases where it is required for SQLite
such as for unique constraints.References: #896
1.7.0
1.7.0
Released: August 30, 2021
changed
-
[changed] [installation] Alembic 1.7 now supports Python 3.6 and above; support for prior versions
including Python 2.7 has been dropped. -
[changed] [installation] Make the
python-dateutil
library an optional dependency.
This library is only required if thetimezone
option
is used in the Alembic configuration.
An extra require namedtz
is available with
pip install alembic[tz]
to install it.References: #674
-
[changed] [installation] The dependency on
pkg_resources
which is part ofsetuptools
has
been removed, so there is no longer any runtime dependency on
setuptools
. The functionality has been replaced with
importlib.metadata
andimportlib.resources
which are both part of
Python std.lib, or via pypy dependencyimportlib-metadata
for Python
version < 3.8 andimportlib-resources
for Python version < 3.9
(while importlib.resources was added to Python in 3.7, it did not include
the "files" API until 3.9).References: #885
feature
-
[feature] [environment] Enhance
version_locations
parsing to handle paths containing spaces.
The new configuration optionversion_path_separator
specifies the
character to use when splitting theversion_locations
string. The
default for new configurations isversion_path_separator = os
,
which will useos.pathsep
(e.g.,;
on Windows).References: #842
-
[feature] [tests] Created a "test suite" similar to the one for SQLAlchemy, allowing
developers of third-party dialects to test their code against a set of
Alembic tests that have been specially selected to exercise
back-end database operations. At the time of release,
third-party dialects that have adopted the Alembic test suite to verify
compatibility include
CockroachDB and
SAP ASE (Sybase).References: #855
-
[feature] [general] pep-484 type annotations have been added throughout the library.
Additionally, stub .pyi files have been added for the "dynamically"
generated Alembic modulesalembic.op
andalembic.config
, which
include complete function signatures and docstrings, so that the functions
in these namespaces will have both IDE support (vscode, pycharm, etc) as
well as support for typing tools like Mypy. The files themselves are
statically generated from their source functions within the source tree.
usecase
-
[usecase] [batch] Named CHECK constraints are now supported by batch mode, and will
automatically be part of the recreated table assuming they are named. They
also can be explicitly dropped usingop.drop_constraint()
. For
"unnamed" CHECK constraints, these are still skipped as they cannot be
distinguished from the CHECK constraints that are generated by the
Boolean
andEnum
datatypes.Note that this change may require adjustments to migrations that drop or
rename columns which feature an associated named check constraint, such
that an additionalop.drop_constraint()
directive should be added for
that named constraint as there will no longer be an associated column
for it; for theBoolean
andEnum
datatypes, anexisting_type
keyword may be passed toBatchOperations.drop_constraint
as well.References: #884
bug
-
[bug] [operations] Fixed regression due to #803 where the
.info
and.comment
attributes ofTable
would be lost inside of theDropTableOp
class, which when "reversed" into aCreateTableOp
would then have
lost these elements. Pull request courtesy Nicolas CANIART.References: #879
-
[bug] [batch] [sqlite] Batch "auto" mode will now select for "recreate" if the
add_column()
operation is used on SQLite, and the column itself meets the criteria for
SQLite where ADD COLUMN is not allowed, in this case a functional or
parenthesized SQL expression or aComputed
(i.e. generated) column.References: #883
-
[bug] [commands] Re-implemented the
python-editor
dependency as a small internal
function to avoid the need for external dependencies.References: #856
-
[bug] [postgresql] Fixed issue where usage of the PostgreSQL
postgresql_include
option
within aOperations.create_index()
would raise a KeyError, as the
additional column(s) need to be added to the table object used by the
construct internally. The issue is equivalent to the SQL Server issue fixed
in #513. Pull request courtesy Steven Bronson.References: #874
1.6.5
1.6.5
Released: May 27, 2021
bug
-
[bug] [autogenerate] Fixed issue where dialect-specific keyword arguments within the
DropIndex
operation directive would not render in the
autogenerated Python code. As support was improved for adding dialect
specific arguments to directives as part of #803, in particular
arguments such as "postgresql_concurrently" which apply to the actual
create/drop of the index, support was needed for these to render even in a
drop index operation. Pull request courtesy Jet Zhou.References: #849
1.6.4
1.6.3
1.6.3
Released: May 21, 2021
bug
-
[bug] [autogenerate] [regression] Fixed 1.6-series regression where
UniqueConstraint
and to a lesser
extentIndex
objects would be doubled up in the generated model when
theunique=True
/index=True
flags were used.References: #844
-
[bug] [autogenerate] Fixed a bug where paths defined in post-write hook options
would be wrongly escaped in non posix environment (Windows).References: #839
-
[bug] [regression] [versioning] Fixed regression where a revision file that contained its own down revision
as a dependency would cause an endless loop in the traversal logic.References: #843
1.6.2
1.6.1
1.6.1
Released: May 6, 2021
bug
-
[bug] [regression] [versioning] Fixed regression in new revisioning traversal where "alembic downgrade
base" would fail if the database itself were clean and unversioned;
additionally repairs the case where downgrade would fail if attempting
to downgrade to the current head that is already present.References: #838