El dialecto sqlalchemy postgres admite columnas UUID. Esto es fácil (y la pregunta es específicamente postgres). No entiendo por qué las otras respuestas son tan complicadas.
Aquí hay un ejemplo:
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)
Tenga cuidado de no pasar por alto el callable
uuid.uuid4
en la definición de la columna, en lugar de llamar a la función en sí misma con uuid.uuid4()
. De lo contrario, tendrá el mismo valor escalar para todas las instancias de esta clase. Más detalles aquí:
Una expresión escalar, invocable por Python o ColumnElement que representa el valor predeterminado para esta columna, que se invocará al insertar si esta columna no se especifica de otro modo en la cláusula VALUES de la inserción.