Dialekt postgres sqlalchemy obsługuje kolumny UUID. To proste (a pytanie dotyczy konkretnie postgresu) — nie rozumiem, dlaczego inne odpowiedzi są tak skomplikowane.
Oto przykład:
from sqlalchemy.dialects.postgresql import UUID
from flask_sqlalchemy import SQLAlchemy
import uuid
db = SQLAlchemy()
class Foo(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
Uważaj, aby nie przegapić przekazania callable
uuid.uuid4
do definicji kolumny, zamiast wywoływania samej funkcji za pomocą uuid.uuid4()
. W przeciwnym razie będziesz mieć tę samą wartość skalarną dla wszystkich instancji tej klasy. Więcej szczegółów tutaj:
Wyrażenie skalarne, wywoływane w Pythonie lub wyrażenie ColumnElement reprezentujące wartość domyślną dla tej kolumny, które zostanie wywołane po wstawieniu, jeśli ta kolumna nie zostanie w inny sposób określona w klauzuli VALUES wstawiania.