4
respostas

[Reclamação] sqlalchemy.exc.ProgrammingError

Eu ja alterei senha e usuario e não roda direito o meu projeto, teria como passar um codigo pronto para resolver este problema?!!!!!!!!!!!!!!!!!!!!!!!!!!!

ProgrammingError
sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
(Background on this error at: https://sqlalche.me/e/20/f405)

Traceback (most recent call last)
from flask import Flask, render_template, request, redirect
from flask import session, flash, url_for
from flask_sqlalchemy import SQLAlchemy


# Novo objeto sendo instanciado
app = Flask(__name__)
app.secret_key = 'Rsant'

app.config['SQLALCHEMY_DATABASE_URI'] ='{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format(
        SGBD = 'mysql+mysqlconnector',
        usuario = 'root',
        senha = 'senha123',
        servidor = 'localhost',
        database = 'jogoteca'
    )

db = SQLAlchemy(app)

class Jogos(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nome = db.Column(db.String(50), nullable=False)
    categoria = db.Column(db.String(40), nullable=False)
    console = db.Column(db.String(20), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name

class Usuarios(db.Model):
    nickname = db.Column(db.String(8), primary_key=True)
    nome = db.Column(db.String(20), nullable=False)
    senha = db.Column(db.String(100), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name



@app.route('/')
def index():
    # Consulta todos os jogos ordenados pelo ID usando SQLAlchemy
    lista = Jogos.query.order_by(Jogos.id)

    return render_template('Lista.html', titulo='Jogos', jogos=lista)


@app.route('/novo')
def novo():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('novo')))
    return render_template('novo.html', titulo='Novo Jogo')



@app.route('/criar', methods=['POST',])
def criar():
    nome = request.form['nome']
    categoria = request.form['categoria']
    console = request.form['console']

    jogo = Jogos.query.filter_by(nome=nome).first()

    if jogo:
        flash('Jogo já existente!')
        return redirect(url_for('index'))

    novoJogo = Jogos(nome=nome, categoria=categoria, console=console)
    db.session.add(novoJogo)
    db.session.commit()

    return redirect(url_for('index'))

#Tela de Login
@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', proxima=proxima)


@app.route('/autenticar', methods=['POST',])
def autenticar():
    # Consulta um usuário pelo nickname fornecido no formulário
    usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first()

    if usuario:
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname

            flash(usuario.nickname + ' Logado com SUCESSO!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)

    else:
        flash('Usuário não logado')
        return redirect(url_for('login'))


@app.route('/logout')
def logout():
    # Deslogar da Sessão
    session['usuario_logado'] = None
    flash('Logout efetuado com Sucesso!')
    return redirect(url_for('index'))


#Rodar a aplicação
app.run(debug=True)
import mysql.connector
from mysql.connector import errorcode

print("Conectando...")
try:
      conn = mysql.connector.connect(
            host='127.0.0.1',
            user='root',
            password='senha123'
      )
except mysql.connector.Error as err:
      if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
            print('Existe algo errado no nome de usuário ou senha')
      else:
            print(err)
4 respostas

Oi Ramon, vamos resolver isso juntos!

O erro ProgrammingError que você está enfrentando geralmente acontece quando as credenciais de acesso ao MySQL estão incorretas ou o usuário não tem permissão para acessar o banco de dados especificado.

Aqui estão algumas coisas que você pode verificar ou tentar:

  1. Confirme as Credenciais: Certifique-se de que o usuário 'root' e a senha 'senha123' estão corretos e têm os devidos privilégios no servidor MySQL. Você pode verificar isso tentando fazer login no MySQL diretamente com esses dados.

  2. Privacidade do Usuário: Se as credenciais estão corretas, talvez o usuário não tenha permissão para acessar o banco de dados 'jogoteca' do host 'localhost'. Você pode ajustar isso através do MySQL com o comando:

  3. 
    
  4.   GRANT ALL PRIVILEGES ON jogoteca.* TO 'root'@'localhost';
    
  5.      FLUSH PRIVILEGES;
    
  6.         ```
    
  7. Configuração do Flask: No seu código Flask, você está usando a string de conexão corretamente. No entanto, garanta que não há espaços ou caracteres especiais acidentalmente adicionados. Aqui está o exemplo correto:

  8. 
    
  9.   app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:senha123@localhost/jogoteca'
    
  10.      ```
    
  11. Cheque o Código de Erro: No seu caso, o erro é 1045 (28000): Access denied for user 'root'@'localhost', que indica claramente um problema de autenticação. O código que você já tem no bloco try-except para conectar ao MySQL está correto para pegar esse tipo de erro.

  12. Verifique se o MySQL está rodando: Às vezes, o serviço do MySQL pode não estar ativo. Verifique se ele está rodando no seu sistema.

Se depois dessas verificações o problema continuar, recomendo tentar reiniciar o servidor MySQL ou verificar se não há alguma configuração adicional de segurança (como AppArmor ou SELinux) bloqueando a conexão.

Espero que isso ajude, e qualquer coisa, estamos aqui!

Eu não sei aonde colocar esses ajustes de : GRANT ALL PRIVILEGES ON jogoteca.* TO 'root'@'localhost';

 FLUSH PRIVILEGES;
# Novo objeto sendo instanciado
app = Flask(__name__)
app.secret_key = 'Rsant'

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:senha123@localhost/jogoteca'

db = SQLAlchemy(app)

EU TENTEI ADICIONAR ESSES COMANDOS MAS AGORA O ERRO É ESSE QUE FICA MOSTRANDO:

ImportError: cannot import name '_app_ctx_stack' from 'flask' (C:\Users\ramon\ProgramaTeste\Jogoteca\.venv\Lib\site-packages\flask\__init__.py)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)