Solucionado (ver solução)

Importante

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!

Solucionado
(ver solução)
10
respostas

Erro no prepara_banco

Quando dou o run no prepara_banco está dando esse problema

C:\Python34\python.exe C:/Users/Dantas/PycharmProjects/beginflask/prepara_banco.py
Traceback (most recent call last):
  File "C:/Users/Dantas/PycharmProjects/beginflask/prepara_banco.py", line 1, in <module>
    import MySQLdb
ImportError: No module named 'MySQLdb'

Process finished with exit code 1

Segue o código também

import MySQLdb
print('Conectando...')
conn = MySQLdb.connect(user='root', passwd='', host='localhost', port=3306)

# Descomente se quiser desfazer o banco...
#conn.cursor().execute("DROP DATABASE `jogoteca`;")
#conn.commit()

criar_tabelas = '''SET NAMES utf8;
    CREATE DATABASE `jogoteca` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
    USE `jogoteca`;
    CREATE TABLE `jogo` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nome` varchar(50) COLLATE utf8_bin NOT NULL,
      `categoria` varchar(40) COLLATE utf8_bin NOT NULL,
      `console` varchar(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    CREATE TABLE `usuario` (
      `id` varchar(8) COLLATE utf8_bin NOT NULL,
      `nome` varchar(20) COLLATE utf8_bin NOT NULL,
      `senha` varchar(8) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'''

conn.cursor().execute(criar_tabelas)

# inserindo usuarios
cursor = conn.cursor()
cursor.executemany(
      'INSERT INTO jogoteca.usuario (id, nome, senha) VALUES (%s, %s, %s)',
      [
            ('luan', 'Luan Marques', 'flask'),
            ('nico', 'Nico', '7a1'),
            ('danilo', 'Danilo', 'vegas')
      ])

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 senão nada tem efeito
conn.commit()
cursor.close()
10 respostas

Consegui instalar o mysql e o flask_mysql, porém não consigo conectar.

Conectando...
Traceback (most recent call last):
  File "C:/Users/bioinformatica/PycharmProjects/pyflask/prepara_banco.py", line 3, in <module>
    conn = MySQLdb.connect( host='localhost', user='root', passwd='', port=3306)
  File "C:\Users\bioinformatica\PycharmProjects\pyflask\venv\lib\site-packages\MySQLdb\__init__.py", line 86, in Connect
    return Connection(*args, **kwargs)
  File "C:\Users\bioinformatica\PycharmProjects\pyflask\venv\lib\site-packages\MySQLdb\connections.py", line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (10061)")

Process finished with exit code 1

Qual é o user e password padrão ?

import MySQLdb
print('Conectando...')
conn = MySQLdb.connect( host='localhost', user='root', passwd='', port=3306)

Olá, Thiago.

O padrão é esse mesmo: usuário root e senha em branco.

Você consegue conectar com o MySQL por um MySQL Workbench, por exemplo?

Para redefinir a senha, se for o caso, você pode seguir o seguinte artigo: https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html

Pelo Workbench também não tá indo, será que tenho que 'startar' o mysql ? Se sim, como faço ?

Você instalou como?

A melhor maneira é instalar como um serviço do Windows. Aí ele inicia com a sua máquina:

https://dev.mysql.com/doc/refman/5.7/en/windows-start-service.html

Eu só fiz seguir os comandos que o curso pede, pip3 install .... Precisa de algo extra ?

Acho que o MySQL instalado é um pré-requisito...

Tem lá o texto:

Atenção: Antes de começar a fazer o exercício você precisa ter um MySQL instalado na sua máquina ou rodando em algum local acessível.

A questão do pipé pra instalar os drivers que fazem o Python "conversar" com o MySQL.

Instalei e conectei pelo workbench, no python deu isso.

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

Process finished with exit code 1
solução!

Olá, Thiago!

Pelo jeito conectou com o MySQL com sucesso!

Veja lá no final, nos erros:

_mysql_exceptions.OperationalError: (1366, "Incorrect string value: '\\xE7\\xE3o' for column 'categoria' at row 1")

Parece que ele não aceitou o valor da coluna categoria da linha 1.

Parece ser problema de acentuação. O \xE7 é "ç" e o \xE3 é "ã".

Provavelmente é o COLLATE das tabelas no banco de dados.

Tenta modificar de utf8_bin para utf8_general_ci.

Antes de rodar, faça um DROP DATABASE jogoteca; pelo Workbench.

Aewww Alexandre deu certo, vlw pela paciencia!!Obrigado.

Bacana, Thiago!