Ich brauche die Standard-Integer-ID in meinem Modell mit einem UUID zu ersetzen. Das Problem ist, dass es in einem anderen Modell (Fremdschlüssel) verwendet wird. Haben Sie eine Idee, wie Sie diese Operation ausführen können, ohne Daten zu verlieren?mit UUID
class A(Base):
__tablename__ = 'a'
b_id = Column(
GUID(), ForeignKey('b.id'), nullable=False,
server_default=text("uuid_generate_v4()")
)
class B(Base):
__tablename__ = 'b'
id = Column(
GUID(), primary_key=True,
server_default=text("uuid_generate_v4()")
)
Leider funktioniert es nicht, auch ich fürchte, ich werde die Beziehung brechen.
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) default for column "id" cannot be cast automatically to type uuid
Alembic Migration Ich habe versucht, sieht ähnlich aus wie:
op.execute('ALTER TABLE a ALTER COLUMN b_id SET DATA TYPE UUID USING (uuid_generate_v4())')
Ich bin mir nicht sicher, ob ich bekommen, wie dies die bestehenden Beziehungen halten wird. Können Sie es über SQL-Syntax oder Python/Alembic-Code zeigen? – user2091046
Es ist das SQL-Äquivalent des Sack-Sand-Tricks von Jäger der verlorenen Arche, wenn du das gesehen hast, außer mit weniger riesigen Felsbrocken. Ich habe ein Beispiel hinzugefügt. – dmfay