7
respostas

Difícil fazer esse curso andar.. muitos erros

Estou tentando fazer funcionar o acesso ao banco de dados.

Consegui vencer o problema da instalação do flask_mysqldb. Mas vamos aos problemas: 1 - AttributeError: 'MySQL' object has no attribute 'cursor' Consegui vencer porque vi que a classe dao está diferente nos locais em que foram disponibilizadas.Arquivo dao disponibilizado no google drive está assim:

def salvar(self, jogo):
        cursor = self.__db.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.commit()
        return jogo

Arquivo dao disponibilizado em um zip perdido no meio do curso está assim:

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.commit()
        return jogo

Com o segundo código, primeiro erro parou de existir, agora o segundo erro é: AttributeError: 'NoneType' object has no attribute 'cursor'

Debugando o código eu vi que o atributo connection do objeto db está None, logo, esse monte de código não está conseguindo conectar ao banco de dados... A classe prepara_banco funcionou perfeitamente, fui lá no mysql e dei select e vi que tudo foi criado e inserido. Mas pelo flask_mysqldb não está funcionando. Estou perdendo mais tempo tentando corrigir os erros do que fazendo o curso. Afinal, qual é o código correto do dao? O que eu faço? Para onde vou? Desisto do flask_mysqldb e parto para outra vida ? Estou perdida, help me please!

7 respostas

Oi Mônica, como você está? Espero que esteja bem ^-^

Sinto muito que esteja se sentindo perdida no curso devido as dependências do banco, vou tentar te ajudar em relação a isso, tudo bem?

O arquivo dao que você encontrou no google drive, provavelmente encontrou-o em alguns tópicos do fórum, pois, devido a problemas de incompatibilidade da biblioteca mysqldb com a versão atual do python, para que os alunos não ficassem travados no erro, disponibilizei arquivos alternativos(prepara_banco.py e dao.py) que utilizam uma biblioteca de banco de dados diferente da que o professor utiliza. Mas, isso não afeta o curso. As funções são as mesmas, apenas alguns métodos específicos de banco de dados que tiveram que se adaptar a nova biblioteca.

Esse erro AttributeError: 'NoneType' object has no attribute 'cursor' está ocorrendo quando você realiza qual ação em específico?

Por gentileza, coloque o seu código no drive e disponibilize o link para que eu possa efetuar alguns testes.

A gente vai conversando, fico no aguardo.

Oieeeeee,

Então me socorre Nádia, porque tá tenso! Rs Coloquei meu código no git https://github.com/mgastalho/flask.git Agora está dando erro na hora de conectar com o banco de dados na hora de salvar o jogo.

Obrigada.

Mônica, testei seu código. Percebi que a linha jogo_dao.listar() que causa o erro AttributeError: 'NoneType' object has no attribute 'cursor' estava comentada. Com ela comentada, eu obtive êxito ao salvar, entretanto, a lista não estava se atualizando, embora estivesse salvando os dados no banco.

E o erro AttributeError ocorreu porque os recursos do banco irão ser disponibilizados apenas quando acessarmos alguma rota do flask e no seu caso, você está chamando o método do banco listar fora de uma rota. Para que funcione corretamente, basta que você faça a chamada do listar dentro da rota inicial. Veja:

@app.route('/')
def index():
    lista_jogos = jogo_dao.listar()
    return render_template('lista.html', titulo='Jogos',
                           jogos=lista_jogos)

Tente e me diga se obteve êxito.

Meu código funciona pra você, mas não funciona pra mim.. kkkkkkk Quando eu tento salvar, dá o erro: MySQLdb.exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") Deve ser algo na instalação do flaskmysqldb... Vou tentar reinstalar esse flask_mysqldb.. se continuar falhando, vou tentar aprender outro framework de banco e quando conseguir, volto pro curso. Obrigada pelo help

Outra coisa que pode tentar é parar o serviço do MySQL e iniciá-lo novamente. Talvez ele não esteja nem sendo executado em sua máquina. Qual sistema operacional você utiliza?

Está rodando sim, pois a classe conexão está funcionando. Estou conseguindo dar select nas tabelas pelo workbench. Eu uso o Ubuntu. Mas vou tentar fazer isso também.

Tente dar um restart do Mysql via terminal, basta digitar:

sudo /etc/init.d/mysql restart

Ou então:

systemctl restart mysql

E depois tente novamente executar o código.