1
resposta

Mutator

No laravel temos os mutators, que nos ajudam a alterar o retorno de certos campo do banco de dados. No flask com sql sqlalchemy, temos essa possibilidade também?

1 resposta

Olá Willian, como você está?

Peço desculpas pela demora no retorno.

Assim como no Laravel, o Flask com SQLAlchemy também oferece suporte para mutators, que permitem alterar o comportamento de atributos do modelo. No SQLAlchemy, esses mutators são conhecidos como hybrid properties.

As hybrid properties são propriedades que possuem um comportamento customizado, e podem ser usadas para transformar os valores retornados pelo banco de dados. Por exemplo, você pode usar uma hybrid property para retornar o valor de um campo em um formato específico, como uma string formatada ou um objeto personalizado.

Para criar uma hybrid property no SQLAlchemy, você pode usar o decorador @hybrid_property. Por exemplo:

from sqlalchemy.ext.hybrid import hybrid_property

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    _password = db.Column('password', db.String(64))

    @hybrid_property
    def password(self):
        return self._password

    @password.setter
    def password(self, password):
        self._password = generate_password_hash(password)

Neste exemplo, a propriedade password é uma hybrid property que encripta o valor do campo _password antes de salvá-lo no banco de dados.

Caso queira se aprofundar neste assunto, recomendo a leitura abaixo:

O conteúdo recomendado acima está em inglês, o uso da língua inglesa é bem comum na área de tecnologia, mas não se preocupe, caso não tenha afinidade com essa linguagem, recomendo que utilize o tradutor do navegador para uma melhor compressão.

Espero ter ajudado. Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!