postgresql sqlalchemy uuid

¿Cómo establecer un valor predeterminado de columna para una función PostgreSQL usando SQLAlchemy?



uuid (1)

Todas mis tablas definidas en SQLAlchemy tienen una columna de ID de tipo UUID.

from sqlalchemy.ext.declarative import declarative_base from uuid import uuid4 Base = declarative_base() class MyTable(Base): id = Column(UUIDtype, default=uuid4, primary_key=True)

Donde UUIDtype es un tipo de columna especial para el tipo UUID de PostgreSQL. Esto crea con éxito la columna UUID en PostgreSQL, pero solo genera un valor UUID predeterminado cuando se inserta usando SQLAlchemy. Esto está bien para algunos de mis casos de uso, pero quiero asignar el valor predeterminado de la columna en el lado de PostgreSQL en caso de que ocurra una inserción fuera de SQLAlchemy.

El siguiente comando SQL coloca el valor predeterminado adecuado en la columna:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4()

¿Cómo puedo asignar esta función uuid_generate_v4() como la columna por defecto a través de la definición del modelo SQLAlchemy? Si la única opción es a través de la ejecución de una sentencia de SQL sin formato, ¿hay alguna manera de enlazar la ejecución de esa sentencia en el proceso de creación de la tabla?


Deberías usar el parámetro server_default para esto.

id = Column(UUIDtype, server_default=text("uuid_generate_v4()"), primary_key=True)

Vea Server Side Defaults para más información.