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

Dados não estão sendo inseridos no banco

Boa noite ! Estou usando o conector mysql.connector e adaptei o código para esse conector

Porém ao tentar inserir registros na aplicação a mesma não retorna o registros, ficando em branco.

tinha uma variável chamada traduz_jogos(cursor.fetchall()) que não estava definida. Removi deixando somente o cursor.fetchall() mas mesmo assim não

funcionol. poderiam me ajudar com esse problema ?

segue o código abaixo, obrigado !!

/*dao*/
from models import Jogo, Usuario

SQL_DELETA_JOGO = 'delete from jogo where id = %s'
SQL_JOGO_POR_ID = 'SELECT id, nome, categoria, console from jogo where id = %s'
SQL_USUARIO_POR_ID = 'SELECT id, nome, senha from usuario where id = %s'
SQL_ATUALIZA_JOGO = 'UPDATE jogo SET nome=%s, categoria=%s, console=%s where id = %s'
SQL_BUSCA_JOGOS = 'SELECT id, nome, categoria, console from jogo'
SQL_CRIA_JOGO = 'INSERT into jogo (nome, categoria, console) values (%s, %s, %s)'

class JogoDao:
    def __init__(self, db):
        self.__db = db

    def salvar(self, jogo):
        cursor = self.__db.cursor()

        if (jogo.id):
            cursor.execute(SQL_ATUALIZA_JOGO, (jogo.nome, jogo.categoria, jogo.console, jogo.id))
        else:
            cursor.execute(SQL_CRIA_JOGO, (jogo.nome, jogo.categoria, jogo.console))
            jogo.id = cursor.lastrowid
        self.__db.commit()
        return jogo

    def listar(self):
        cursor = self.__db.cursor()
        cursor.execute(SQL_BUSCA_JOGOS)
        jogos = cursor.fetchall()
        return jogos

    def busca_por_id(self, id):
        cursor = self.__db.connection.cursor()
        cursor.execute(SQL_JOGO_POR_ID, (id,))
        tupla = cursor.fetchone()
        return Jogo(tupla[1], tupla[2], tupla[3], id=tupla[0])

    def deletar(self, id):
        self.__db.cursor().execute(SQL_DELETA_JOGO, (id, ))
        self.__db.commit()


class UsuarioDao:
    def __init__(self, db):
        self.__db = db


/* Prepara_banco */
import mysql.connector
print('Conectando...')
conn = mysql.connector.connect(user='root',password='mysql',host='0.0.0.0',database='mydesenv')
cursor = conn.cursor()

sql.execute('create database if not exists jogoteca')
sql.execute('use jogoteca')
sql.execute("""create table if not exists 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""")
sql.execute("""create table if not exists usuario (id varchar(8) primary key not null,nome varchar(20) not null,senha varchar(8) not null)""")


# inserindo usuarios

sql.executemany(
      'INSERT INTO mydesenv.usuario (id, nome, senha) VALUES (%s, %s, %s)',
      [
            ('luan', 'Luan Marques', 'flask'),
            ('nico', 'Nico', '7a1'),
            ('danilo', 'Danilo', 'vegas')
      ])

sql.execute('select * from mydesenv.usuario')
print(' -------------  Usuários:  -------------')
for user in sql.fetchall():
    print(user[1])

# inserindo jogos
sql.executemany(
      'INSERT INTO mydesenv.jogo (nome, categoria, console) VALUES (%s, %s, %s)',
      [
            ('God of War 4', 'Acao', 'PS4'),
            ('NBA 2k18', 'Esporte', 'Xbox One'),
            ('Rayman Legends', 'Indie', 'PS4'),
            ('Super Mario RPG', 'RPG', 'SNES'),
            ('Super Mario Kart', 'Corrida', 'SNES'),
            ('Fire Emblem Echoes', 'Estrategia', '3DS'),
      ])

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

# commitando senão nada tem efeito
conn.commit()
sql.close()
2 respostas
solução!

Oi Eduardo, tudo bem com você?

No seu arquivo prepara_banco.py há uma variável sql que não foi definida, creio que você queria se referia ao cursor da conexão. Outro ponto é que o seu script referencia as tabelas do database jogoteca com o database mydesenv. Realizei essas modificações e as deixo abaixo:

import mysql.connector

conexao = mysql.connector.connect(
    host="localhost",
    user="seu usuário do banco",
    password="sua senha do banco"
)

cursor = conexao.cursor()

cursor.execute('create database if not exists jogoteca')
cursor.execute('use jogoteca')
cursor.execute("""create table if not exists 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"""
               )
cursor.execute("""create table if not exists usuario (
                id varchar(8) primary key not null,
                nome varchar(20) not null,
                senha varchar(8) not null
                )"""
               )

# inserindo usuarios

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', 'Acao', 'PS4'),
        ('NBA 2k18', 'Esporte', 'Xbox One'),
        ('Rayman Legends', 'Indie', 'PS4'),
        ('Super Mario RPG', 'RPG', 'SNES'),
        ('Super Mario Kart', 'Corrida', 'SNES'),
        ('Fire Emblem Echoes', 'Estrategia', '3DS'),
    ])

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

# commitando senão nada tem efeito
conexao.commit()
cursor.close()

Me avise se obteve êxito e caso não tenha conseguido, fique tranquilo, continuaremos buscando soluções. Tudo bem?

Abraços e bons estudos!

Nadia, muito obrigado pela ajudara ;)