.. change::
🎟️ 1145
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.
.. change::
:tags: bug, oracle
Implemented basic server default comparison for the Oracle backend;
previously, Oracle's formatting of reflected defaults prevented any
matches from occurring.
.. change::
:tags: bug, sqlite
Adjusted SQLite's compare server default implementation to better handle
defaults with or without parens around them, from both the reflected and
the local metadata side.
.. change::
:tags: bug, mssql
Adjusted SQL Server's compare server default implementation to better
handle defaults with or without parens around them, from both the reflected
and the local metadata side.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=135
- Update to 1.9.0:
feature
* 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.
See also Running Alembic Check to test for new upgrade operations
References: #724
bug
* Fixed issue in tox.ini file where changes in the tox 4.0 series to the format of “passenv” caused tox to not function correctly,
in particular raising an error as of tox 4.0.6.
* Fixed typing issue where revision.process_revision_directives was not fully typed; additionally ensured all Callable and Dict arguments
to EnvironmentContext.configure() include parameters in the typing declaration.
Additionally updated the codebase for Mypy 0.990 compliance.
References: #1110
OBS-URL: https://build.opensuse.org/request/show/1056256
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=134
* Fixed bug where the SQLite implementation of
:meth:`.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
treated as "schemas" in SQLAlchemy).
* Added an error raise for the condition where
:meth:`.Operations.batch_alter_table` is used in ``--sql`` mode, where the
operation requires table reflection, as is the case when running against
SQLite without giving it a fixed ``Table`` object. Previously the operation
would fail with an internal error. To get a "move and copy" batch
operation as a SQL script without connecting to a database,
a ``Table`` object should be passed to the
:paramref:`.Operations.batch_alter_table.copy_from` parameter so that
reflection may be skipped.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=132
* Fixed issue where using :meth:`.Operations.create_table` in conjunction
with a :class:`.CheckConstraint` that referred to table-bound
:class:`.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.
* The ``logging.fileConfig()`` line in ``env.py`` templates, which is used
to setup Python logging for the migration run, is now conditional on
:attr:`.Config.config_file_name` not being ``None``. Otherwise, the line
is skipped as there is no default logging configuration present.
* Fixed bug where an :meth:`.Operations.alter_column` operation would change
a "NOT NULL" column to "NULL" by emitting an ALTER COLUMN statement that
did not specify "NOT NULL". (In the absence of "NOT NULL" T-SQL was
implicitly assuming "NULL"). An :meth:`.Operations.alter_column` operation
that specifies :paramref:`.Operations.alter_column.type` should also
specify include either :paramref:`.Operations.alter_column.nullable` or
:paramref:`.Operations.alter_column.existing_nullable` to inform Alembic as
to whether the emitted DDL should include "NULL" or "NOT NULL"; a warning
is now emitted if this is missing under this scenario.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=128
* 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.
* Fixed regression where usage of a with_variant() datatype in conjunction with
the existing_type option of op.alter_column() under batch mode would lead to an
internal exception.
* Implemented support for recognizing and rendering SQLAlchemy “variant” types
going forward into SQLAlchemy 2.0, where the architecture of “variant”
datatypes will be changing.
* Added a rule to the MySQL impl so that the translation between JSON / LONGTEXT
is accommodated by autogenerate, treating LONGTEXT from the server as
equivalent to an existing JSON in the model.
* Removed a warning raised by SQLAlchemy when dropping constraints on MSSQL
regarding statement caching.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=127
* Fixed a regression that prevented the use of post write hooks on python
version lower than 3.9
* Added missing attributes from context stubs.
* Fixed issue where registration of custom ops was prone to failure due to
the registration process running exec() 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
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=124
* feature
+ [feature] [autogenerate] Fix the documentation regarding the
default command-line argument position of the revision script
filename within the post-write hook arguments. Implement a
REVISION_SCRIPT_FILENAME token, enabling the position to be
changed. Switch from str.split() to shlex.split() for more
robust command-line argument parsing.
+ [feature] Implement a .cwd (current working directory) suboption
for post-write hooks (of type console_scripts). This is useful
for tools like pre-commit, which rely on the working directory
to locate the necessary config files. Add pre-commit as an
example to the documentation. Minor change: rename some
variables from ticket #819 to improve readability.
* bug
+ [bug] [autogenerate] Refactored the implementation of
MigrateOperation constructs such as CreateIndexOp,
CreateTableOp, etc. so that they no longer rely upon maintaining
a persistent version of each schema object internally; instead,
the state variables of each operation object will be used to
produce the corresponding construct when the operation is
invoked. The rationale is so that environments which m
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=121
* Fixed regression caused by SQLAlchemy 1.4 where the "alembic current"
command would fail due to changes in the ``URL`` object.
* Add async template to Alembic to bootstrap environments that use
async DBAPI. Updated the cookbook to include a migration guide
on how to adapt an existing enviroment for use with DBAPI drivers.
* Fixed bug in versioning model where a downgrade across a revision with a
dependency on another branch, yet an ancestor is also dependent on that
branch, would produce an erroneous state in the alembic_version table,
making upgrades impossible without manually repairing the table.
* Changed the default ordering of "CREATE" and "DROP" statements indexes and
unique constraints within the autogenerate process, so that for example in
an upgrade() operation, a particular index or constraint that is to be
replaced such as for a casing convention change will not produce any naming
conflicts.
* Fixed issue where autogenerate rendering of ``op.alter_column()`` would
fail to include MySQL ``existing_nullable=False`` if the column were part
of a primary key constraint within the table metadata.
* Added support for rendering of "identity" elements on
:class:`.Column` objects, supported in SQLAlchemy via
the :class:`.Identity` element introduced in version 1.4.
* Adding columns with identity is supported on PostgreSQL,
MSSQL and Oracle. Changing the identity options or removing
it is supported only on PostgreSQL and Oracle.
* To accommodate SQLAlchemy 1.4 and 2.0, the migration model now no longer
assumes that the SQLAlchemy Connection will autocommit an individual
operation.
* Modified the ``add_column()`` operation such that the ``Column`` object in
use is shallow copied to a new instance if that ``Column`` is already
attached to a ``table()`` or ``Table``.
* Added rendering for the ``Table.prefixes`` element to autogenerate so that
the rendered Python code includes these directives.
* Alembic 1.5.0 now supports **Python 2.7 and Python 3.6 and above**, as well
as **SQLAlchemy 1.3.0 and above**.
* Add ``__main__.py`` file to alembic package to support invocation
with ``python -m alembic``.
* Removed deprecated ``--head_only`` option to the ``alembic current``
command
- Drop pytest_depr_from_parent.patch, pytest plugin no longer used.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=117
* bugs
+ Reverted the name change of the “revisions” argument to
command.stamp() to “revision” as apparently applications are
calling upon this argument as a keyword name. Pull request
courtesy Thomas Bechtold. Special translations are also added
to the command line interface so that it is still known
as “revisions” in the CLI.
References: #601
+ Removed the “test requirements” from “setup.py test”, as
this command now only emits a removal error in any case
and these requirements are unused.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=96
* Fixed issue where server default comparison on the PostgreSQL dialect would
fail for a blank string on Python 3.7 only, due to a change in regular
expression behavior in Python 3.7.
* Removed use of deprecated ``force`` parameter for SQLAlchemy quoting
functions as this parameter will be removed in a future release.
Pull request courtesy Parth Shandilya(ParthS007).
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=84
+ Render autogenerate=True if present Fixed issue where
"autoincrement=True" would not render for a column that specified
it, since as of SQLAlchemy 1.1 this is no longer the default value
for "autoincrement".
+ Make call to declarative_base clear in example.
+ Use external impl for type rendering The render_type() method of
DefaultImpl was hardcoded to only work for SQLAlchemy types.
+ Implement native boolean check constraint flag in test suite
+ Use repr for drop_constraint schema
+ Add recipe for generating Python code for existing tables
* The ScriptDirectory system that loads migration files from a
* [feature] Added -r argument to alembic history command, allows specification of [start]:[end] to view a slice of history.
* [feature] Source base is now in-place for Python 2.6 through 3.3,
without the need for 2to3.
+ added Operations.create_primary_key() operation, will genenerate an
+ Explicit error message describing the case when downgrade --sql
+ [feature] New config argument
is run, to support script.py.mako templates with
to the template context when running the
MySQL. CHECK and undefined raise an error.
identifiers, i.e. "alembic upgrade +2",
"alembic downgrade -1". Courtesy
+ [bug] Fixed bug whereby directories inside of
on Pypy, would mistakenly be interpreted as
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=65
- update to 0.8.7:
- Fixed bug where upgrading to the head of a branch which is already
present would fail, only if that head were also the dependency
of a different branch that is also upgraded, as the revision system
would see this as trying to go in the wrong direction. The check
here has been refined to distinguish between same-branch revisions
out of order vs. movement along sibling branches.
- Adjusted the version traversal on downgrade
such that we can downgrade to a version that is a dependency for
a version in a different branch, *without* needing to remove that
dependent version as well. Previously, the target version would be
seen as a "merge point" for it's normal up-revision as well as the
dependency. This integrates with the changes for 🎫`377`
and 🎫`378` to improve treatment of branches with dependencies
overall.
- Fixed bug where a downgrade to a version that is also a dependency
to a different branch would fail, as the system attempted to treat
this as an "unmerge" of a merge point, when in fact it doesn't have
the other side of the merge point available for update.
- Fixed bug where the "alembic current" command wouldn't show a revision
as a current head if it were also a dependency of a version in a
different branch that's also applied. Extra logic is added to
extract "implied" versions of different branches from the top-level
versions listed in the alembic_version table.
- Fixed bug where a repr() or str() of a Script object would fail
if the script had multiple dependencies.
- Fixed bug in autogen where if the DB connection sends the default
schema as "None", this "None" would be removed from the list of
schemas to check if include_schemas were set. This could possibly
impact using include_schemas with SQLite.
OBS-URL: https://build.opensuse.org/request/show/419376
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=51
- update to 0.8.6:
- Errors which occur within the Mako render step are now intercepted
and raised as CommandErrors like other failure cases; the Mako
exception itself is written using template-line formatting to
a temporary file which is named in the exception message.
- Added a fix to Postgresql server default comparison which first checks
if the text of the default is identical to the original, before attempting
to actually run the default. This accomodates for default-generation
functions that generate a new value each time such as a uuid function.
- Fixed bug introduced by the fix for 🎫`338` in version 0.8.4
where a server default could no longer be dropped in batch mode.
Pull request courtesy Martin Domke.
- Fixed bug where SQL Server arguments for drop_column() would not
be propagated when running under a batch block. Pull request
courtesy Michal Petrucha.
OBS-URL: https://build.opensuse.org/request/show/400005
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=48
- update to 0.8.5:
- Fixed bug where the columns rendered in a ``PrimaryKeyConstraint``
in autogenerate would inappropriately render the "key" of the
column, not the name. Pull request courtesy Jesse Dhillon.
- Repaired batch migration support for "schema" types which generate
constraints, in particular the ``Boolean`` datatype which generates
a CHECK constraint. Previously, an alter column operation with this
type would fail to correctly accommodate for the CHECK constraint
on change both from and to this type. In the former case the operation
would fail entirely, in the latter, the CHECK constraint would
not get generated. Both of these issues are repaired.
- Changing a schema type such as ``Boolean`` to a non-schema type would
emit a drop constraint operation which emits ``NotImplementedError`` for
the MySQL dialect. This drop constraint operation is now skipped when
the constraint originates from a schema type.
- A major improvement to the hash id generation function, which for some
reason used an awkward arithmetic formula against uuid4() that produced
values that tended to start with the digits 1-4. Replaced with a
simple substring approach which provides an even distribution. Pull
request courtesy Antti Haapala.
- Added an autogenerate renderer for the :class:`.ExecuteSQLOp` operation
object; only renders if given a plain SQL string, otherwise raises
NotImplementedError. Can be of help with custom autogenerate
sequences that includes straight SQL execution. Pull request courtesy
Jacob Magnusson.
- Batch mode generates a FOREIGN KEY constraint that is self-referential
using the ultimate table name, rather than ``_alembic_batch_temp``.
When the table is renamed from ``_alembic_batch_temp`` back to the
original name, the FK now points to the right name. This
will **not** work if referential integrity is being enforced (eg. SQLite
OBS-URL: https://build.opensuse.org/request/show/385578
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=46
- update to 0.8.2:
- Added workaround in new foreign key option detection feature for MySQL’s
consideration of the “RESTRICT” option being the default, for which no
value is reported from the database; the MySQL impl now corrects for when
the model reports RESTRICT but the database reports nothing. A similar
rule is in the default FK comparison to accommodate for the default
“NO ACTION” setting being present in the model but not necessarily
reported by the database, or vice versa.
- A custom EnvironmentContext.configure.process_revision_directives hook
can now generate op directives within the UpgradeOps and DowngradeOps
containers that will be generated as Python code even when the
--autogenerate flag is False; provided that revision_environment=True,
the full render operation will be run even in “offline” mode.
- Implemented support for autogenerate detection of changes in the ondelete,
onupdate, initially and deferrable attributes of ForeignKeyConstraint
objects on SQLAlchemy backends that support these on reflection (as of
SQLAlchemy 1.0.8 currently Postgresql for all four, MySQL for ondelete
and onupdate only). A constraint object that modifies these values will
be reported as a “diff” and come out as a drop/create of the constraint
with the modified values. The fields are ignored for backends which
don’t reflect these attributes (as of SQLA 1.0.8 this includes SQLite,
Oracle, SQL Server, others).
- Repaired the render operation for the ops.AlterColumnOp object to succeed
when the “existing_type” field was not present.
- Fixed a regression 0.8 whereby the “multidb” environment template failed
to produce independent migration script segments for the output template.
This was due to the reorganization of the script rendering system for 0.8.
To accommodate this change, the MigrationScript structure will in the case
of multiple calls to MigrationContext.run_migrations() produce lists for
the MigrationScript.upgrade_ops and MigrationScript.downgrade_ops attributes;
OBS-URL: https://build.opensuse.org/request/show/327176
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-alembic?expand=0&rev=44