Alembic: Wie kann man benutzerdefinierte Typen in einem Modell migrieren?

8

Mein User Modell ist

%Vor%

Dabei ist GUID ein benutzerdefinierter Typ, wie in sqlalchemy docs beschrieben (Genau das gleiche)

Wenn ich jetzt

starte %Vor%

Ich bekomme meine upgrade() als

%Vor%

aber während des Upgrades - & gt; alembic upgrade head , ich sehe

%Vor%

Wie kann ich hier mit GUID / custom type arbeiten?

    
daydreamer 27.03.2013, 19:49
quelle

3 Antworten

7

Sie können sa.GUID() entweder durch sa.CHAR(32) oder UUID() ersetzen (nach dem Hinzufügen der Importzeile from sqlalchemy.dialects.postgresql import UUID ), abhängig vom Dialekt.

Ersetzen Sie es mit GUID() (nach dem Hinzufügen der Import-Zeile from your.models.custom_types import GUID ) funktioniert auch, aber dann ist das Upgrade-Skript an Ihren Modell-Code gebunden, was möglicherweise keine gute Sache ist.

    
sayap 27.03.2013, 20:44
quelle
3

Ich hatte ein ähnliches Problem und löste es wie folgt:

Nehmen wir an, Sie haben das folgende Modul my_guid , das (von der Seite, die Sie bereits erwähnt haben, mit geringfügigen Namensänderungen):

%Vor%

Wenn Sie diese GUID in Ihren Modellen verwenden, müssen Sie nur drei Zeilen bei alembic/env.py hinzufügen:

%Vor%

Das hat für mich funktioniert. Hoffe das hilft!

    
Philipp der Rautenberg 13.08.2013 11:29
quelle
1

Die Verwendung der Funktion __repr__ der Attributklasse impl funktionierte bei mir für die meisten benutzerdefinierten Typen. Ich finde es sauberer, wenn die Migrationsdefinition in der Klasse enthalten ist, anstatt sich darum zu kümmern, Importe in Ihre env.py oder scripts.py.mako zu setzen. Außerdem ist es einfach, den Code zwischen Modulen zu verschieben.

%Vor%

Die Automigration erzeugt CHAR(length=XXX) .

    
Kazanz 05.05.2017 17:23
quelle