from sqlalchemy import CHAR, TypeDecorator from sqlalchemy.dialects.postgresql import UUID class StringUUID(TypeDecorator): impl = CHAR cache_ok = True def process_bind_param(self, value, dialect): if value is None: return value elif dialect.name == "postgresql": return str(value) else: return value.hex def load_dialect_impl(self, dialect): if dialect.name == "postgresql": return dialect.type_descriptor(UUID()) else: return dialect.type_descriptor(CHAR(36)) def process_result_value(self, value, dialect): if value is None: return value return str(value)