Bom dia, Clarisse.
Como eu havia dito, caso tentássemos e não obtivéssemos sucesso no flask_mysqldb
iríamos fazer a refatoração para o pymysql
e aqui está.
Arquivo prepara_banco.py
:
import pymysql
conn = pymysql.connect(host='localhost',
user='seu_user',
password='seu_password')
# Descomente se quiser desfazer o banco...
# conn.cursor().execute("DROP DATABASE `jogoteca`;")
# conn.commit()
# Criando o banco de dados
conn.cursor().execute('CREATE DATABASE IF NOT EXISTS jogoteca')
conn.select_db('jogoteca')
# Criando tabelas no banco
cur = conn.cursor()
cur.execute("CREATE TABLE `jogo` (`id` int NOT NULL AUTO_INCREMENT,`nome` varchar(50) NOT NULL,`categoria` varchar(40) NOT NULL,`console` varchar(20) NOT NULL,PRIMARY KEY (`id`))")
cur.execute("CREATE TABLE `usuario` (`id` varchar(8) NOT NULL,`nome` varchar(20) NOT NULL,`senha` varchar(8) NOT NULL,PRIMARY KEY (`id`))")
# inserindo usuarios
cur.executemany(
'INSERT INTO jogoteca.usuario (id, nome, senha) VALUES (%s, %s, %s)',
[
('luan', 'Luan Marques', 'flask'),
('nico', 'Nico', '7a1'),
('danilo', 'Danilo', 'vegas')
])
cur.execute('select * from jogoteca.usuario')
print(' ------------- Usuários: -------------')
for user in cur.fetchall():
print(user[1])
# inserindo jogos
cur.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'),
])
cur.execute('select * from jogoteca.jogo')
print(' ------------- Jogos: -------------')
for jogo in cur.fetchall():
print(jogo[1])
conn.commit()
cur.close()
Arquivo dao.py
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 = traduz_jogos(cursor.fetchall())
return jogos
def busca_por_id(self, id):
cursor = self.__db.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
def buscar_por_id(self, id):
cursor = self.__db.cursor()
cursor.execute(SQL_USUARIO_POR_ID, (id,))
dados = cursor.fetchone()
usuario = traduz_usuario(dados) if dados else None
return usuario
def traduz_jogos(jogos):
def cria_jogo_com_tupla(tupla):
return Jogo(tupla[1], tupla[2], tupla[3], id=tupla[0])
return list(map(cria_jogo_com_tupla, jogos))
def traduz_usuario(tupla):
return Usuario(tupla[0], tupla[1], tupla[2])
No arquivo jogoteca.py
inclua estes trechos:
import pymysql
db = pymysql.connect(host='localhost',
user='seu_user',
password='seu_password',
db='jogoteca')