1
resposta

método para Salvar no Banco de Dados

Alguém poderia explicar porquê no método que é responsável por salvar os dados do objeto no banco de dados, quando é uma nova inserção, ele retorna um objeto, entretanto no script que chama esse método não usa esse retorno?

módulo DAO

class JogoDao:
    def __init__(self, db):
        self.__db = db

    def salvar(self, jogo):
        cursor = self.__db.connection.cursor()

        if (jogo.id):
            cursor.execute(SQL_ATUALIZA_JOGO, (jogo.nome, jogo.categoria, jogo.console, jogo.id))
        else:
            cursor.execute(SQL_CRIA_JOGO, (jogo.nome, jogo.categoria, jogo.console))
            jogo.id = cursor.lastrowid
        self.__db.connection.commit()

        return jogo  #        <----------------  retorna o objeto jogo

módulo main

@app.route('/criar', methods=['POST',])
def criar():
    nome = request. form['nome']
    categoria = request. form['categoria']
    console = request. form['console']
    jogo = Jogo(nome, categoria, console)
    jogo_dao.salvar(jogo)   #     <-------- Não utiliza o objeto retornado pelo método
    return redirect(url_for('index'))
1 resposta

Olá Maercio, tudo bem com você?

Peço desculpas pela demora no retorno.

A rota criar (/criar) no momento não precisa fazer uso do objeto retornado pela classe JogoDao, a rota apenas usa o método salvar() da classe para salvar um novo jogo no servidor MySQL.

Mas caso queiramos fazer o uso deste retorno, podemos adicionar uma implementação para a rota, onde o retorno do método salvar() será usado para coletar o ID do jogo que foi salvo, e logo após apresentaremos uma mensagem para o usuário informando com qual ID o jogo foi criado, como apresentado abaixo.

jogo_salvo = jogo_dao.salvar(jogo)
flash('Jogo criado com a ID: ' + str(jogo_salvo.id))

No código acima, estamos salvando o retorno do método salvar() na variável jogo_salvo e logo após imprimindo uma mensagem para o usuário informando o ID do jogo, implementando na rota criar (/criar) presente no arquivo jogoteca.py termos o seguinte código.

@app.route('/criar', methods=['POST', ])
def criar():
    nome = request.form['nome']
    categoria = request.form['categoria']
    console = request.form['console']
    jogo = Jogo(nome, categoria, console)
    jogo_salvo = jogo_dao.salvar(jogo)
    flash('Jogo criado com a ID: ' + str(jogo_salvo.id))
    return redirect(url_for('index'))

Com o código acima implementado, basta salvar o arquivo jogoteca.py e iniciar o servidor, salve um novo jogo no site para que na tela inicial seja apresentado a mensagem informando que o jogo foi criado com uma determinada ID, como apresentado na imagem abaixo.

início da transcrição. Imagem contendo a tag a exibição de uma mensagem padrão da função flash() do Flask, a mensagem sendo exibida dentro de um retângulo verde-claro, está escrito o seguinte texto: Jogo criado com a ID: 29. Final da transcrição.

No decorrer das aulas o instrutor realizará uma implementação do código onde será feito o uso do retorno do método salvar() da classe JogoDao para nomear os arquivos de imagens usados, você pode acompanhar essa implementação acessando a aula abaixo.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

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