meu banco de dados la no preparando_banco esta dando um erro -> NameError: name 'connection' is not defined o que pode ser esse error?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
meu banco de dados la no preparando_banco esta dando um erro -> NameError: name 'connection' is not defined o que pode ser esse error?
Olá,
poste o código tbm, será mais fácil ajudar.
Mas, aparentemente a variavel connection está sendo acessada fora de seu escopo.
Verifique se vc não está criando essa variável dentro de um try, ou if e tentado acessá-la fora dele.
Para resolver, poderia criar a variável fora do bloco, mas só setá-la dentro do bloco, exemplo:
con = None
try:
con = mysql.connector.connect
...
Boa noite! Foi esse código que foi passado na aula e esta dando o erro
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 = [
("Carlos", "CB", "123")
]
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()
Olá,
nesse caso, na minha opinião, isso acontece porque existe uma falha nesse script.
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()
nessse trecho, mesmo que não ocorra a conexão, ele tenta atribuir a referência do objeto cursor à variável cursor. Por isso da mensagem conn is not defined. A variável conn não deve estar sendo definido porque está ocorrendo algum problema com a conexão com o banco.
Se vc inserir todo o código a partir de cursor = conn.cursor() logo após o fechamento do parentese da conn, no try, identando conforme necessário é claro, verá que o erro irá mudar. Exemplo abaixo:
try:
conn = mysql.connector.connect(
host='127.0.0.1',
user='root',
password='admin'
)
cursor = conn.cursor()
cursor.execute("DROP DATABASE IF EXISTS ...
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)
A variável conn não é criada e quando tenta atribuir o objeto cursor() à variável cursor, ocorre o erro.
No post anterior eu tinha mencionado que uma variável criada dentro do try não é visível fora dele. Essa afirmação está errada. Isso acontece no Java. No Python, variáveis criadas dentro de um bloco try/catch são visíveis fora dele.
Até +