O dialeto sqlalchemy postgres suporta colunas UUID. Isso é fácil (e a pergunta é especificamente postgres) - não entendo por que as outras respostas são tão complicadas.
Aqui está um exemplo:
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)
Tenha cuidado para não deixar de passar o
callable
uuid.uuid4
na definição da coluna, em vez de chamar a própria função com uuid.uuid4()
. Caso contrário, você terá o mesmo valor escalar para todas as instâncias dessa classe. Mais detalhes aqui:
Uma expressão escalar, chamável em Python ou ColumnElement que representa o valor padrão para esta coluna, que será invocada na inserção se esta coluna não for especificada na cláusula VALUES da inserção.