1
resposta

ERRO na preparação do Banco de Dados

import MySQLdb print('Conectando...') conn = MySQLdb.connect(user='root', passwd='admin', 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()

ERRO

Traceback (most recent call last): File "C:/Users/bruno/PycharmProjects/JogoTeca/Prepara_banco.py", line 35, in ('danilo', 'Danilo', 'vegas') File "C:\Users\bruno\PycharmProjects\teste\venv\lib\site-packages\MySQLdb\cursors.py", line 237, in executemany self.getdb().encoding) File "C:\Users\bruno\PycharmProjects\teste\venv\lib\site-packages\MySQLdb\cursors.py", line 264, in doexecute_many rows += self.execute(sql + postfix) File "C:\Users\bruno\PycharmProjects\teste\venv\lib\site-packages\MySQLdb\cursors.py", line 186, in execute while self.nextset(): File "C:\Users\bruno\PycharmProjects\teste\venv\lib\site-packages\MySQLdb\cursors.py", line 139, in nextset nr = db.next_result() MySQLdb._exceptions.ProgrammingError: (1007, "Can't create database 'jogoteca'; database exists")

Process finished with exit code 1

Parece que não esta criando o banco de dados, e na hora da inserção das tabelas ele não encontra o BD

1 resposta

Não que o meu esteja funcionando, mas no seu caso, como o DB já existe, talvez funcione "descomentando" a parte de desfazer o banco...


O meu deu vários erros, mas o mais recente foi: Conectando... Traceback (most recent call last): File "C:/Users/Pantufa/cursos/FlaskP300/jogoteca2/prepara_banco.py", line 31, in conn.cursor().execute(criar_tabelas) File "C:\Users\Pantufa\AppData\Local\Programs\Python\Python37-32\lib\site-packages\MySQLdb\cursors.py", line 208, in execute assert isinstance(query, (bytes, bytearray)) AssertionError

Process finished with exit code 1

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

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

criar_tabelas =  [
    "SET NAMES utf8mb4",
    "CREATE DATABASE jogoteca DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci",
    "USE jogoteca",
    """CREATE TABLE jogo (
      id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      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_general_ci;
    """,
    """CREATE TABLE usuario (
      id varchar(8) NOT NULL PRIMARY KEY,
      nome varchar(20) COLLATE NOT NULL,
      senha varchar(8) COLLATE NOT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
    """
]

assert isinstance(conn.cursor().execute, object)
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()