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

Erro ao executar o prepara_banco

Aparentemente eu consegui fazer a conexão, mas ele mostra alguns erros que não consegui identificar o porque:

C:\Users\Suporte3\PycharmProjects\jogoteca\venv\Scripts\python.exe C:/Users/Suporte3/PycharmProjects/jogoteca/prepara_banco.py Conectando... ------------- Usuários: ------------- Danilo Luan Marques Nico Traceback (most recent call last): File "C:/Users/Suporte3/PycharmProjects/jogoteca/prepara_banco.py", line 52, in ('Fire Emblem Echoes', 'Estratégia', '3DS') File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 281, in executemany self.getdb().encoding) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 318, in doexecute_many rows += self.execute(sql + postfix) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 250, in execute self.errorhandler(self, exc, value) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler raise errorvalue File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 247, in execute res = self.query(query) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 411, in _query rowcount = self.do_query(q) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\cursors.py", line 374, in doquery db.query(q) File "C:\Users\Suporte3\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\connections.py", line 277, in query mysql.connection.query(self, query) _mysqlexceptions.OperationalError: (1366, "Incorrect string value: '\xE7\xE3o' for column 'categoria' at row 1")

Process finished with exit code 1

4 respostas

Galera, após penar um pouquinho aqui. Eu consegui rodar o prepara_banco.

1) Reinstalei o MySQL Server (via MySQL Installer); 2) Criei o usuário root, senha e porta customizado, podem por o que acharem melhor 2) Refiz o código do prepara_banco.py

O código é esse:

import MySQLdb

#Conexão com o banco de dados print('Conectando no banco de dados...') conn = MySQLdb.connect(user='root', passwd='123456', host='127.0.0.1', port=3306) cursor = conn.cursor()

#Drop Schema - Descomente se quiser excluir a base cursor.execute('DROP DATABASE jogoteca') print('Banco deletado!') conn.commit()

#Cria a base de dados create_schema = 'CREATE SCHEMA IF NOT EXISTS jogoteca DEFAULT CHARACTER SET utf8;' 'USE jogoteca' cursor.execute(create_schema) print('Base criada com sucesso!')

#Cria as tabelas print('Criando tabelas...') create_tables = 'CREATE TABLE jogo' '(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;' '' 'CREATE TABLE usuario' '(id varchar(8) NOT NULL,' 'nome varchar(20) NOT NULL,' 'senha varchar(8) NOT NULL,' 'PRIMARY KEY (id))' 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;' \

cursor.execute(create_tables) print('Tabelas criadas com sucesso!\n' 'Executando...')

#Inserindo usuários cursor.executemany( 'INSERT INTO jogoteca.usuario (id,nome,senha) VALUES (%s,%s,%s)', [ ('Caio', 'Caio Nickel', '1234'), ('Eduardo', 'Eduardo Henrique', '12345'), ('Jose', 'José Victor', '123456') ] ) cursor.execute('select * from jogoteca.usuario') print(' ------------- Usuários: -------------') for user in cursor.fetchall(): print(user[1])

#Inserindo jogos cursor.executemany( 'INSERT INTO jogoteca.jogo (nome,categoria,console) VALUES (%s,%s,%s)', [ ('God of War 4', 'Ação', 'PS4'), ('NBA 2k18', 'Esporte', 'Xbox One'), ('Rayman Legends', 'Indie', 'PS4'), ('Super Mario RPG', 'RPG', 'SNES'), ('Super Mario Kart', 'Corrida', 'SNES'), ('Fire Emblem Echoes', 'Estratégia', '3DS') ] )

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

#commitando para finalizar conn.commit() cursor.close()

solução!

Oi Caio,

O problema é no salvamento dos jogos.

Esse erro acontece por que o banco de dados deve estar configurado com uma localização e encoding diferentes do esperado, não permitindo acentos. Por exemplo, se você mudar as categorias Ação pra Acao e Estratégia pra Estrategia, já vai funcionar.

Caso queira configurar pra não acontecer mais isso:

https://cursos.alura.com.br/forum/topico-erro-ao-executar-prepara_banco-py-incorrect-string-value-xe7-xe3o-for-column-categoria-52239

Ah! Não me atentei a esse detalhe do acento... Mas beleza, obrigado!

Show de bola, que bom que resolveu.

Posso fechar o tópico, Caio?