Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NameError: name 'conn' is not defined

Quando rodo o código do prepara banco dá um erro, já instalei o mysql por fora mas mesmo assim continua sem solução

O projeto está no meu github: https://github.com/GustavoMacedoPereira/projeto-em-flask.git

ERRO:

Conectando...
Authentication plugin 'caching_sha2_password' is not supported
Traceback (most recent call last):
  File "C:\Users\gu-gu\OneDrive\pycharm\alura\jogoteca\prepara_banco.py", line 17, in <module>
    cursor = conn.cursor()
             ^^^^
NameError: name 'conn' is not defined

Process finished with exit code 1

CÓDIGO:

    
    import mysql.connector
from mysql.connector import errorcode

print("Conectando...")
try:
      conn = mysql.connector.connect(
            host='127.0.0.1',
            user='root',
            password='admin'
      )
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()
1 resposta
solução!

Olá Gustavo! Tudo bem?

Esse tipo de erro pode acontecer se a conexão com o banco de dados falhar e a exceção for capturada, mas a variável conn nunca é inicializada.

Mas analisando e testando o código que você compartilhou via repositório, não notei nenhum problema ou erro na estrutura do seu código que poderia causar esse erro. O que me fez pensar duas causas para esse problemas:

  1. O problema está relacionado as suas credenciais de acesso ao banco de dados. Então, certifique-se que, nos arquivos jogoteca.py e prepara_banco.py você tenha adicionado as credenciais corretas de acesso.

  2. Uma incompatibilidade com as versões das dependências. Seguem as versões das dependências que utilizei para testar o seu código e fizeram ele rodar sem apresentar nenhum problema:

Flask==3.0.0
mysql-connector-python==8.0.28
Flask-SQLAlchemy==3.1.1
Flask-WTF==1.0.0
Flask-Bcrypt==0.7.1

Espero ter ajudado e bons estudos!

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