angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Alembic erkennt Spaltentypänderungen und ändert die Länge von Zeichenkettenfeldern.

Die automatische Erkennung erkennt standardmäßig keine Spaltentypänderungen. Sie müssen dies einschalten, indem Sie die Datei alembic/env.py bearbeiten.

9 März 2019
post main image

Standardmäßig ändert Alembic nicht die Länge der Zeichenkettenfelder, was mir nach der Änderung eines Zeichenkettenfeldes von aufgefallen ist:

description = Column(String(150), server_default='')

zu:

description = Column(String(250), server_default='')

Es wurden keine Änderungen vorgenommen.

Es scheint, dass die Erkennung von Spaltentypänderungen standardmäßig deaktiviert ist, so dass Sie sie zuerst testen können und durch Hinzufügen von'compare_type=True' zum Kontext eingeschaltet werden können.
Bearbeiten Sie die Datei alembic/env.py und fügen Sie'compare_type=True' an zwei Stellen hinzu:

def run_migrations_offline():
    ...
    context.configure(
        url=url, target_metadata=target_metadata, literal_binds=True,
        compare_type=True # <--- here
    )
    ...


def run_migrations_online():
    ...
    with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            compare_type=True # <--- here
        )
    ...

Nun werden die Änderungen des Spaltentyps erkannt und korrekt migriert.

Links / Impressum

Alembic - migration for String length change
https://eshlox.net/2017/08/06/alembic-migration-for-string-length-change

Auto Generating Migrations
https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect

Einen Kommentar hinterlassen

Kommentieren Sie anonym oder melden Sie sich zum Kommentieren an.

Kommentare (1)

Eine Antwort hinterlassen

Antworten Sie anonym oder melden Sie sich an, um zu antworten.

avatar

good! Thanks