Description
Alembic is a database migrations tool written by the author of `SQLAlchemy <http://www.sqlalchemy.org>`_. A migrations tool offers the following functionality: * Can emit ALTER statements to a database in order to change the structure of tables and other constructs * Provides a system whereby "migration scripts" may be constructed; each script indicates a particular series of steps that can "upgrade" a target database to a new version, and optionally a series of steps that can "downgrade" similarly, doing the same steps in reverse. * Allows the scripts to execute in some sequential manner. The goals of Alembic are: * Very open ended and transparent configuration and operation. A new Alembic environment is generated from a set of templates which is selected among a set of options when setup first occurs. The templates then deposit a series of scripts that define fully how database connectivity is established and how migration scripts are invoked; the migration scripts themselves are generated from a template within that series of scripts. The scripts can then be further customized to define exactly how databases will be interacted with and what structure new migration files should take. * Full support for transactional DDL. The default scripts ensure that all migrations occur within a transaction - for those databases which support this (Postgresql, Microsoft SQL Server), migrations can be tested with no need to manually undo changes upon failure. * Minimalist script construction. Basic operations like renaming tables/columns, adding/removing columns, changing column attributes can be performed through one line commands like alter_column(), rename_table(), add_constraint(). There is no need to recreate full SQLAlchemy Table structures for simple operations like these - the functions themselves generate minimalist schema structures behind the scenes to achieve the given DDL sequence. * "auto generation" of migrations. While real world migrations are far more complex than what can be automatically determined, Alembic can still eliminate the initial grunt work in generating new migration directives from an altered schema. The ``--autogenerate`` feature will inspect the current status of a database using SQLAlchemy's schema inspection capabilities, compare it to the current state of the database model as specified in Python, and generate a series of "candidate" migrations, rendering them into a new migration script as Python directives. The developer then edits the new file, adding additional directives and data migrations as needed, to produce a finished migration. Table and column level changes can be detected, with constraints and indexes to follow as well. * Full support for migrations generated as SQL scripts. Those of us who work in corporate environments know that direct access to DDL commands on a production database is a rare privilege, and DBAs want textual SQL scripts. Alembic's usage model and commands are oriented towards being able to run a series of migrations into a textual output file as easily as it runs them directly to a database. Care must be taken in this mode to not invoke other operations that rely upon in-memory SELECTs of rows - Alembic tries to provide helper constructs like bulk_insert() to help with data-oriented operations that are compatible with script-based DDL. * Non-linear, dependency-graph versioning. Scripts are given UUID identifiers similarly to a DVCS, and the linkage of one script to the next is achieved via human-editable markers within the scripts themselves. The structure of a set of migration files is considered as a directed-acyclic graph, meaning any migration file can be dependent on any other arbitrary set of migration files, or none at all. Through this open-ended system, migration files can be organized into branches, multiple roots, and mergepoints, without restriction. Commands are provided to produce new branches, roots, and merges of branches automatically. * Provide a library of ALTER constructs that can be used by any SQLAlchemy application. The DDL constructs build upon SQLAlchemy's own DDLElement base and can be used standalone by any application or script. * At long last, bring SQLite and its inability to ALTER things into the fold, but in such a way that SQLite's very special workflow needs are accommodated in an explicit way that makes the most of a bad situation, through the concept of a "batch" migration, where multiple changes to a table can be batched together to form a series of instructions for a single, subsequent "move-and-copy" workflow. You can even use "move-and-copy" workflow for other databases, if you want to recreate a table in the background on a busy system. Documentation and status of Alembic is at https://alembic.sqlalchemy.org/ The SQLAlchemy Project ====================== Alembic is part of the `SQL
Release History
| Version | Changes | Urgency | Date |
|---|---|---|---|
| 1.18.4 | Imported from PyPI (1.18.4) | Low | 4/21/2026 |
| rel_1_18_4 | # 1.18.4 Released: February 10, 2026 ## bug - **[bug] [operations]** Reverted the behavior of `Operations.add_column()` that would automatically render the "PRIMARY KEY" keyword inline when a `Column` with `primary_key=True` is added. The automatic behavior, added in version 1.18.2, is now opt-in via the new `Operations.add_column.inline_primary_key` parameter. This change restores the ability to render a PostgreSQL SERIAL column, which is required to be `primary_ke | Low | 2/10/2026 |
| rel_1_18_3 | # 1.18.3 Released: January 29, 2026 ## bug - **[bug] [autogenerate]** Fixed regression in version 1.18.0 due to [#1771](https://github.com/sqlalchemy/alembic/issues/1771) where autogenerate would raise `NoReferencedTableError` when a foreign key constraint referenced a table that was not part of the initial table load, including tables filtered out by the `EnvironmentContext.configure.include_name` callable or tables in remote schemas that were not included in the initi | Low | 1/29/2026 |
| rel_1_18_2 | # 1.18.2 Released: January 28, 2026 ## usecase - **[usecase] [operations]** The `primary_key` parameter on `Column` is now honored when `Operations.add_column()` is used, and will emit the "PRIMARY KEY" keyword inline within the ADD COLUMN directive. This is strictly a syntax enhancement; no attempt is made to reconcile the column's primary key status with any existing primary key constraint or particular backend limitations on adding columns to the primary key. | Low | 1/28/2026 |
| rel_1_18_1 | # 1.18.1 Released: January 14, 2026 ## bug - **[bug] [autogenerate]** Fixed issue in new plugin system where the configured logger was not correctly using the `__name__` token to identify the logger. References: [#1779](https://github.com/sqlalchemy/alembic/issues/1779) - **[bug] [operations]** Revised the change regarding SQLAlchemy 2.1 and deprecation warnings related to `isolate_from_table=True`. Further developments in release 2.1 have revised how this parameter | Low | 1/14/2026 |
| rel_1_18_0 | # 1.18.0 Released: January 9, 2026 ## feature - **[feature] [operations]** When alembic is run in "verbose" mode, alembic now logs a message to indicate from which file is used to load the configuration. References: [#1737](https://github.com/sqlalchemy/alembic/issues/1737) - **[feature] [autogenerate]** Autogenerate reflection sweeps now use the "bulk" inspector methods introduced in SQLAlchemy 2.0, which for selected dialects including PostgreSQL and Oracle use ba | Low | 1/9/2026 |
| rel_1_17_2 | # 1.17.2 Released: November 14, 2025 ## feature - **[feature] [operations]** Added `Operations.implementation_for.replace` parameter to `Operations.implementation_for()`, allowing replacement of existing operation implementations. This allows for existing operations such as `CreateTableOp` to be extended directly. Pull request courtesy justanothercatgirl. References: [#1750](https://github.com/sqlalchemy/alembic/issues/1750) ## bug - **[bug] [mssql]** Fixed | Low | 11/14/2025 |
| rel_1_17_1 | # 1.17.1 Released: October 28, 2025 ## usecase - **[usecase] [commands]** Added `command.current.check_heads` parameter to `command.current()` command, available from the command line via the `--check-heads` option to `alembic current`. This tests if all head revisions are applied to the database and raises `DatabaseNotAtHead` (or from the command line, exits with a non-zero exit code) if this is not the case. The parameter operates equvialently to the cookbook recipe | Low | 10/29/2025 |
| rel_1_17_0 | # 1.17.0 Released: October 11, 2025 - **[change] [tests]** The top-level test runner has been changed to use `nox`, adding a `noxfile.py` as well as some included modules. The `tox.ini` file remains in place so that `tox` runs will continue to function in the near term, however it will be eventually removed and improvements and maintenance going forward will be only towards `noxfile.py`. - **[change] [general]** The minimum Python version is now 3.10, as Python 3.9 is EO | Low | 10/11/2025 |
| rel_1_16_5 | # 1.16.5 Released: August 27, 2025 ## bug - **[bug] [mysql]** Fixed Python-side autogenerate rendering of index expressions in MySQL dialect by aligning it with SQLAlchemy's MySQL index expression rules. Pull request courtesy david-fed. References: [#1492](https://github.com/sqlalchemy/alembic/issues/1492) - **[bug] [config]** Fixed issue where new pyproject.toml config would fail to parse the integer value used for the `truncate_slug_length` parameter. Pull reques | Low | 8/27/2025 |
| rel_1_16_4 | # 1.16.4 Released: July 10, 2025 ## bug - **[bug] [config]** Fixed issue in new `pyproject.toml` support where boolean values, such as those used for the `recursive_version_locations` and `sourceless` configuration parameters, would not be accepted. References: [#1694](https://github.com/sqlalchemy/alembic/issues/1694) | Low | 7/10/2025 |
| rel_1_16_3 | # 1.16.3 Released: July 8, 2025 ## usecase - **[usecase] [commands]** Added new `pyproject_async` template, combining the new `pyproject` template with the `async` template. Pull request courtesy Alc-Alc. References: [#1683](https://github.com/sqlalchemy/alembic/issues/1683) - **[usecase] [autogenerate]** Add "module" post-write hook. This hook type is almost identical to the console_scripts hook, except it's running `python -m black` instead of using black's `cons | Low | 7/8/2025 |
| rel_1_16_2 | # 1.16.2 Released: June 16, 2025 ## bug - **[bug] [autogenerate]** Fixed issue where dialect-specific keyword arguments in `dialect_kwargs` were not rendered when rendering the `Operations.create_foreign_key()` operation. This prevented dialect-specific keywords from being rendered using custom `Rewriter` recipes that modify `ops.CreateForeignKeyOp`, similar to other issues such as [#1635](https://github.com/sqlalchemy/alembic/issues/1635). Pull request courtesy Just | Low | 6/16/2025 |
| rel_1_16_1 | # 1.16.1 Released: May 21, 2025 ## bug - **[bug] [command]** Fixed regression caused by the `pathlib` refactoring that removed the use of `Config.get_template_directory()` as the canonical source of templates; the method is still present however it no longer would be consulted for a custom config subclass, as was the case with flask-migrate. References: [#1660](https://github.com/sqlalchemy/alembic/issues/1660) - **[bug] [command]** Fixed regression caused by the `p | Low | 5/21/2025 |
| rel_1_16_0 | # 1.16.0 Released: May 21, 2025 ## feature - **[feature] [environment]** Added optional [PEP 621](https://peps.python.org/pep-0621) support to Alembic, allowing all source code related configuration (e.g. local file paths, post write hook configurations, etc) to be configured in the project's `pyproject.toml` file. A new init template `pyproject` is added which illustrates a basic [PEP 621](https://peps.python.org/pep-0621) setup. Besides being better integrated | Low | 5/21/2025 |
| rel_1_15_2 | # 1.15.2 Released: March 28, 2025 ## bug - **[bug] [autogenerate]** Fixed issue where the "modified_name" of `AlterColumnOp` would not be considered when rendering op directives for autogenerate. While autogenerate cannot detect changes in column name, this would nonetheless impact approaches that made use of this attribute in rewriter recipes. Pull request courtesy lenvk. References: [#1635](https://github.com/sqlalchemy/alembic/issues/1635) | Low | 3/28/2025 |
| rel_1_15_1 | # 1.15.1 Released: March 4, 2025 ## bug - **[bug] [installation]** Fixed an issue in the new [PEP 621](https://peps.python.org/pep-0621) `pyproject.toml` layout that prevented Alembic's template files from being included in the `.whl` file in the distribution. References: [#1616](https://github.com/sqlalchemy/alembic/issues/1616) | Low | 3/4/2025 |
| rel_1_15_0 | # 1.15.0 Released: March 4, 2025 ## changed - **[changed] [general]** Support for Python 3.8 is dropped as of Alembic 1.15.0; this version is now EOL so Python 3.9 or higher is required for Alembic 1.15. - **[changed] [general]** Support for SQLAlchemy 1.3, which was EOL as of 2021, is now dropped from Alembic as of version 1.15.0. SQLAlchemy version 1.4 or greater is required for use with Alembic 1.15.0. - **[changed] [general]** Installation has been converted to use | Low | 3/4/2025 |
| rel_1_14_1 | # 1.14.1 Released: January 19, 2025 ## usecase - **[usecase] [sqlite]** Modified SQLite's dialect to render "ALTER TABLE <t> RENAME COLUMN" when `Operations.alter_column()` is used with a straight rename, supporting SQLite's recently added column rename feature. References: [#1576](https://github.com/sqlalchemy/alembic/issues/1576) ## bug - **[bug] [environment]** Added tzdata to tz extras, which is required on some platforms such as Windows. Pull request courtes | Low | 1/19/2025 |
| rel_1_14_0 | # 1.14.0 Released: November 4, 2024 ## usecase - **[usecase] [runtime]** Added a new hook to the `DefaultImpl` `DefaultImpl.version_table_impl()`. This allows third party dialects to define the exact structure of the alembic_version table, to include use cases where the table requires special directives and/or additional columns so that it may function correctly on a particular backend. This is not intended as a user-expansion hook, only a dialect implementation hook | Low | 11/4/2024 |
| rel_1_13_3 | # 1.13.3 Released: September 23, 2024 ## usecase - **[usecase] [autogenerate]** Render `if_exists` and `if_not_exists` parameters in `CreateTableOp`, `CreateIndexOp`, `DropTableOp` and `DropIndexOp` in an autogenerate context. While Alembic does not set these parameters during an autogenerate run, they can be enabled using a custom `Rewriter` in the `env.py` file, where they will now be part of the rendered Python code in revision files. Pull request courtesy of L | Low | 9/23/2024 |
| rel_1_13_2 | # 1.13.2 Released: June 26, 2024 ## usecase - **[usecase] [autogenerate]** Improve computed column compare function to support multi-line expressions. Pull request courtesy of Georg Wicke-Arndt. References: [#1391](https://github.com/sqlalchemy/alembic/issues/1391) ## bug - **[bug] [commands]** Fixed bug in alembic command stdout where long messages were not properly wrapping at the terminal width. Pull request courtesy Saif Hakim. References: [#1384](https | Low | 6/26/2024 |
| rel_1_13_1 | # 1.13.1 Released: December 20, 2023 ## bug - **[bug] [autogenerate]** Fixed `Rewriter` so that more than two instances could be chained together correctly, also allowing multiple `process_revision_directives` callables to be chained. Pull request courtesy zrotceh. References: [#1337](https://github.com/sqlalchemy/alembic/issues/1337) - **[bug] [environment]** Fixed issue where the method `EnvironmentContext.get_x_argument()` using the `EnvironmentContext.get_x_arg | Low | 12/20/2023 |
| rel_1_13_0 | # 1.13.0 Released: December 1, 2023 ## changed - **[changed] [installation]** Alembic 1.13 now supports Python 3.8 and above. References: [#1359](https://github.com/sqlalchemy/alembic/issues/1359) ## usecase - **[usecase] [operations]** Updated logic introduced in [#151](https://github.com/sqlalchemy/alembic/issues/151) to allow `if_exists` and `if_not_exists` on index operations also on SQLAlchemy 1.4 series. Previously this feature was mistakenly requiring the 2 | Low | 12/1/2023 |
| rel_1_12_1 | # 1.12.1 Released: October 26, 2023 ## usecase - **[usecase]** Alembic now accommodates for Sequence and Identity that support dialect kwargs. This is a change that will be added to SQLAlchemy v2.1. References: [#1304](https://github.com/sqlalchemy/alembic/issues/1304) ## bug - **[bug] [autogenerate] [regression]** Fixed regression caused by [#879](https://github.com/sqlalchemy/alembic/issues/879) released in 1.7.0 where the ".info" dictionary of `Table` would not ren | Low | 10/26/2023 |
| rel_1_12_0 | # 1.12.0 Released: August 31, 2023 ## feature - **[feature] [autogenerate]** Added new feature to the "code formatter" function which allows standalone executable tools to be run against code, without going through the Python interpreter. Known as the `exec` runner, it complements the existing `console_scripts` runner by allowing non-Python tools such as `ruff` to be used. Pull request courtesy Mihail Milushev. References: [#1275](https://github.com/sqlalchemy/a | Low | 8/31/2023 |
| rel_1_11_3 | # 1.11.3 Released: August 16, 2023 ## bug - **[bug] [autogenerate] [postgresql]** Improved autogenerate compare of expression based indexes on PostgreSQL to produce fewer wrong detections. References: [#1270](https://github.com/sqlalchemy/alembic/issues/1270) - **[bug] [autogenerate]** Fixed issue with `NULLS NOT DISTINCT` detection in postgresql that would keep detecting changes in the index or unique constraint. References: [#1291](https://github.com/sqlalche | Low | 8/16/2023 |
| rel_1_11_2 | # 1.11.2 Released: August 4, 2023 ## feature - **[feature] [operations]** Added parameters if_exists and if_not_exists for index operations. Pull request courtesy of Max Adrian. References: [#151](https://github.com/sqlalchemy/alembic/issues/151) ## usecase - **[usecase] [typing]** Added typing to the default script mako templates. References: [#1253](https://github.com/sqlalchemy/alembic/issues/1253) - **[usecase] [autogenerate]** Added support in autogenerat | Low | 8/4/2023 |
| rel_1_11_1 | # 1.11.1 Released: May 17, 2023 ## bug - **[bug] [autogenerate] [regression]** As Alembic 1.11.0 is considered a major release (Alembic does not use semver, nor does its parent project SQLAlchemy; this has been `clarified <versioning_scheme>` in the documentation), change [#1130](https://github.com/sqlalchemy/alembic/issues/1130) modified calling signatures for most operations to consider all optional keyword parameters to be keyword-only arguments, to match what was al | Low | 5/17/2023 |
| rel_1_11_0 | # 1.11.0 Released: May 15, 2023 ## usecase - **[usecase] [commands]** Added quiet option to the command line, using the `-q/--quiet` option. This flag will prevent alembic from logging anything to stdout. References: [#1109](https://github.com/sqlalchemy/alembic/issues/1109) - **[usecase] [asyncio]** Added `AbstractOperations.run_async()` to the operation module to allow running async functions in the `upgrade` or `downgrade` migration function when running alem | Low | 5/15/2023 |
| rel_1_10_4 | # 1.10.4 Released: April 24, 2023 ## bug - **[bug] [operations]** Fixed issue where using a directive such as `op.create_foreign_key()` to create a self-referential constraint on a single table where the same column were present on both sides (e.g. within a composite foreign key) would produce an error under SQLAlchemy 2.0 and a warning under SQLAlchemy 1.4 indicating that a duplicate column were being added to a table. References: [#1215](https://github.com/sqlalc | Low | 4/24/2023 |
| rel_1_10_3 | # 1.10.3 Released: April 5, 2023 ## bug - **[bug] [typing]** Fixed various typing issues observed with pyright, including issues involving the combination of `Function` and `MigrationContext.begin_transaction()`. References: [#1191](https://github.com/sqlalchemy/alembic/issues/1191), [#1201](https://github.com/sqlalchemy/alembic/issues/1201) - **[bug] [autogenerate]** Fixed error raised by alembic when running autogenerate after removing a function based index. | Low | 4/5/2023 |
| rel_1_10_2 | # 1.10.2 Released: March 8, 2023 ## bug - **[bug] [ops]** Fixed regression where Alembic would not run with older SQLAlchemy 1.3 versions prior to 1.3.24 due to a missing symbol. Workarounds have been applied for older 1.3 versions. References: [#1196](https://github.com/sqlalchemy/alembic/issues/1196) | Low | 3/8/2023 |
| rel_1_10_1 | # 1.10.1 Released: March 6, 2023 ## bug - **[bug] [postgresql]** Fixed issue regarding PostgreSQL `ExcludeConstraint`, where constraint elements which made use of `literal_column()` could not be rendered for autogenerate. Additionally, using SQLAlchemy 2.0.5 or greater, `text()` constructs are also supported within PostgreSQL `ExcludeConstraint` objects for autogenerate render. Pull request courtesy Jan Katins. References: [#1184](https://github.com/sqlalchemy/ | Low | 3/7/2023 |
| rel_1_10_0 | # 1.10.0 Released: March 5, 2023 ## feature - **[feature] [revisioning]** Recursive traversal of revision files in a particular revision directory is now supported, by indicating `recursive_version_locations = true` in alembic.ini. Pull request courtesy ostr00000. References: [#760](https://github.com/sqlalchemy/alembic/issues/760) ## usecase - **[usecase] [autogenerate] [postgresql]** Added support for autogenerate comparison of indexes on PostgreSQL which includ | Low | 3/5/2023 |
| rel_1_9_4 | # 1.9.4 Released: February 16, 2023 ## bug - **[bug] [mssql]** Ongoing fixes for SQL Server server default comparisons under autogenerate, adjusting for SQL Server's collapsing of whitespace between SQL function arguments when reporting on a function-based server default, as well as its arbitrary addition of parenthesis within arguments; the approach has now been made more aggressive by stripping the two default strings to compare of all whitespace, parenthesis, and quo | Low | 2/16/2023 |
| rel_1_9_3 | # 1.9.3 Released: February 7, 2023 ## bug - **[bug] [autogenerate]** Fixed issue where rendering of user-defined types that then went onto use the `.with_variant()` method would fail to render, if using SQLAlchemy 2.0's version of variants. References: [#1167](https://github.com/sqlalchemy/alembic/issues/1167) | Low | 2/7/2023 |
| rel_1_9_2 | # 1.9.2 Released: January 14, 2023 ## bug - **[bug] [typing]** Fixed typing definitions for `EnvironmentContext.get_x_argument()`. Typing stubs are now generated for overloaded proxied methods such as `EnvironmentContext.get_x_argument()`. References: [#1146](https://github.com/sqlalchemy/alembic/issues/1146), [#1147](https://github.com/sqlalchemy/alembic/issues/1147) - **[bug] [autogenerate]** Fixed regression caused by [#1145](https://github.com/sqlalchemy/alembi | Low | 1/14/2023 |
| rel_1_9_1 | # 1.9.1 Released: December 23, 2022 ## bug - **[bug] [autogenerate]** Fixed issue where server default compare would not work for string defaults that contained backslashes, due to mis-rendering of these values when comparing their contents. References: [#1145](https://github.com/sqlalchemy/alembic/issues/1145) - **[bug] [oracle]** Implemented basic server default comparison for the Oracle backend; previously, Oracle's formatting of reflected defaults prevented any | Low | 12/23/2022 |
| rel_1_9_0 | # 1.9.0 Released: December 15, 2022 ## feature - **[feature] [commands]** Added new Alembic command `alembic check`. This performs the widely requested feature of running an "autogenerate" comparison between the current database and the `MetaData` that's currently set up for autogenerate, returning an error code if the two do not match, based on current autogenerate settings. Pull request courtesy Nathan Louie. References: [#724](https://github.com/sqlalchemy/alemb | Low | 12/15/2022 |
| rel_1_8_1 | # 1.8.1 Released: July 13, 2022 ## bug - **[bug] [sqlite]** Fixed bug where the SQLite implementation of `Operations.rename_table()` would render an explicit schema name for both the old and new table name, which while is the standard ALTER syntax, is not accepted by SQLite's syntax which doesn't support a rename across schemas. In particular, the syntax issue would prevent batch mode from working for SQLite databases that made use of attached databases (which are t | Low | 7/13/2022 |
| rel_1_8_0 | # 1.8.0 Released: May 31, 2022 ## changed - **[changed] [installation]** Alembic 1.8 now supports Python 3.7 and above. References: [#1025](https://github.com/sqlalchemy/alembic/issues/1025) - **[changed] [environment]** The "Pylons" environment template has been removed as of Alembic 1.8. This template was based on the very old pre-Pyramid Pylons web framework which has been long superseded by Pyramid. References: [#987](https://github.com/sqlalchemy/alembic/i | Low | 5/31/2022 |
| rel_1_7_7 | # 1.7.7 Released: March 14, 2022 ## bug - **[bug] [operations]** Fixed issue where using `Operations.create_table()` in conjunction with a `CheckConstraint` that referred to table-bound `Column` objects rather than string expressions would be added to the parent table potentially multiple times, resulting in an incorrect DDL sequence. Pull request courtesy Nicolas CANIART. References: [#1004](https://github.com/sqlalchemy/alembic/issues/1004) - **[bug] [environm | Low | 3/14/2022 |
| rel_1_7_6 | # 1.7.6 Released: February 1, 2022 ## usecase - **[usecase] [commands]** Add a new command `alembic ensure_version`, which will ensure that the Alembic version table is present in the target database, but does not alter its contents. Pull request courtesy Kai Mueller. References: [#964](https://github.com/sqlalchemy/alembic/issues/964) ## bug - **[bug] [batch] [regression]** Fixed regression where usage of a `with_variant()` datatype in conjunction with the `exis | Low | 2/1/2022 |
| rel_1_7_5 | # 1.7.5 Released: November 11, 2021 ## bug - **[bug] [tests]** Adjustments to the test suite to accommodate for error message changes occurring as of SQLAlchemy 1.4.27. | Low | 11/11/2021 |
| rel_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.9 References: [#934](https://github.com/sqlalchemy/alembic/issues/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](https://github.com/sqlalchemy/alembic/iss | Low | 10/6/2021 |
| rel_1_7_3 | # 1.7.3 Released: September 17, 2021 ## bug - **[bug] [mypy]** Fixed type annotations for the "constraint_name" argument of operations `create_primary_key()`, `create_foreign_key()`. Pull request courtesy TilmanK. References: [#914](https://github.com/sqlalchemy/alembic/issues/914) | Low | 9/17/2021 |
| rel_1_7_2 | # 1.7.2 Released: September 17, 2021 ## bug - **[bug] [typing]** Added missing attributes from context stubs. References: [#900](https://github.com/sqlalchemy/alembic/issues/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](https://github.com/sqlalchemy/alembic/issues/897) - **[bug] [ops] [regression]** Fixed issue where registration of custom ops was prone to fail | Low | 9/17/2021 |
| rel_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](https://github.com/sqlalchemy/alembic/issues/893) - **[bug] [pep484]** Fixed issue in generated .pyi files where default values for `Optional` arguments were missing, thereby causing mypy to consi | Low | 8/30/2021 |
| rel_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 the `timezone` option is used in the Alembic configuration. An extra require named `tz` is available with `pip install alembic[tz]` to install it. Ref | Low | 8/30/2021 |
| rel_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](https://github.com/sqlalchemy/alembic/issues/803), in particular arguments such as "postgresql_concurrently" which apply to the actual create/drop of the index, support | Low | 5/27/2021 |
