Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

DatabaseError

Gente, tô tomando esse erro aqui quando fui pra parte de arrumar as rotas Insira aqui a descrição dessa imagem para ajudar na acessibilidadeJá tentei procurar esse "123@localhost" no código, mas não achei.

Código do preparabanco.py:

import mysql.connector
from mysql.connector import errorcode

print("Conectando...")
try:
      conn = mysql.connector.connect(
            host='127.0.0.1',
            user='root',
            password='Mudar@123'
      )
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)

cursor = conn.cursor()

cursor.execute("DROP DATABASE IF EXISTS `jogoteca`;")

cursor.execute("CREATE DATABASE `jogoteca`;")

cursor.execute("USE `jogoteca`;")

# criando tabelas
TABLES = {}
TABLES['Jogos'] = ('''
      CREATE TABLE `jogos` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nome` varchar(50) NOT NULL,
      `categoria` varchar(40) NOT NULL,
      `console` varchar(20) NOT NULL,
      PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;''')

TABLES['Usuarios'] = ('''
      CREATE TABLE `usuarios` (
      `nome` varchar(20) NOT NULL,
      `nickname` varchar(8) NOT NULL,
      `senha` varchar(100) NOT NULL,
      PRIMARY KEY (`nickname`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;''')

for tabela_nome in TABLES:
      tabela_sql = TABLES[tabela_nome]
      try:
            print('Criando tabela {}:'.format(tabela_nome), end=' ')
            cursor.execute(tabela_sql)
      except mysql.connector.Error as err:
            if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
                  print('Já existe')
            else:
                  print(err.msg)
      else:
            print('OK')

# inserindo usuarios
usuario_sql = 'INSERT INTO usuarios (nome, nickname, senha) VALUES (%s, %s, %s)'
usuarios = [
      ("Bruno Divino", "BD", "alohomora"),
      ("Camila Ferreira", "Mila", "paozinho"),
      ("Guilherme Louro", "Cake", "python_eh_vida")
]
cursor.executemany(usuario_sql, usuarios)

cursor.execute('select * from jogoteca.usuarios')
print(' -------------  Usuários:  -------------')
for user in cursor.fetchall():
    print(user[1])

# inserindo jogos
jogos_sql = 'INSERT INTO jogos (nome, categoria, console) VALUES (%s, %s, %s)'
jogos = [
      ('Tetris', 'Puzzle', 'Atari'),
      ('God of War', 'Hack n Slash', 'PS2'),
      ('Mortal Kombat', 'Luta', 'PS2'),
      ('Valorant', 'FPS', 'PC'),
      ('Crash Bandicoot', 'Hack n Slash', 'PS2'),
      ('Need for Speed', 'Corrida', 'PS2'),
]
cursor.executemany(jogos_sql, jogos)

cursor.execute('select * from jogoteca.jogos')
print(' -------------  Jogos:  -------------')
for jogo in cursor.fetchall():
    print(jogo[1])

# commitando se não nada tem efeito
conn.commit()

cursor.close()
conn.close()
2 respostas

Código do jogoteca.py

from flask import Flask, render_template, request, redirect, session, flash, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = 'alura' #criptografia para evitar que pessoas alterem dados nos cookies

#conexão com o banco de dados

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

db = SQLAlchemy(app) ##instanciar o banco de dados da ORM q vai conectar com o banco de dados da nossa aplicação

#conectando as tabelas

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):
    nick = 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('/') #cria rota
def index():
    lista = Jogos.query.order_by(Jogos.id)
    return render_template('lista.html',titulo = 'Jogos', jogos = lista)

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

@app.route('/criar', methods=['POST',]) #como padrão a rota so aceita GET, vc tem que colocar o 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('Esse jogo já existe')
        return redirect (url_for('index'))

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


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

@app.route('/autenticar', methods=['POST',])
def autenticar():

    usuario = Usuarios.query.filter_by(nick = request.form['usuario'].first())
    if usuario:
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nick
            flash(f' Boa noite, {usuario.nick}')
            proxima_pag = request.form['proxima']
            return redirect(proxima_pag)
    else:
        flash("Usuário inválido")
        return redirect(url_for('login'))

@app.route('/logout')
def logout():
    session['usuario_logado'] = None #deixa o session vazio, não grava mais o nome do user
    flash('Desconectado')
    return redirect(url_for('index'))


app.run(debug=True) #faz rodar a aplicação
solução!

Consegui resolver com a ajuda do Bruno! Vou deixar aqui, caso alguém também tenha esse erro

Na senha de usuário do DB tem um @ (minha senha do banco era Mudar@123) Ele considera esse @ como parte da URI e não a senha Por isso ele retorna que não consegue acesso ao server 123@localhost A senha está sendo considerada: Mudar o server está sendo considerado: 123@localhost"

Mudei a senha e voltou a funcionar normalmente ^^