Mein User
Modell ist
Dabei ist GUID
ein benutzerdefinierter Typ, wie in sqlalchemy docs beschrieben (Genau das gleiche)
Wenn ich jetzt
starte %Vor% Ich bekomme meine upgrade()
als
aber während des Upgrades - & gt; alembic upgrade head
, ich sehe
Wie kann ich hier mit GUID
/ custom type arbeiten?
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.
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):
Wenn Sie diese GUID in Ihren Modellen verwenden, müssen Sie nur drei Zeilen bei alembic/env.py
hinzufügen:
Das hat für mich funktioniert. Hoffe das hilft!
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.
Die Automigration erzeugt CHAR(length=XXX)
.
Tags und Links python sqlalchemy flask-sqlalchemy alembic