meu banco de dados la no preparando_banco esta dando um erro -> NameError: name 'connection' is not defined o que pode ser esse error?
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é +