Solucionado (ver solução)
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!