Segue o código:
prepara_banco_SQLite.py:
import sqlite3
print('Conectando...')
conn = sqlite3.connect("jogoteca.db")
cursor = conn.cursor()
try:
cursor.execute('DROP TABLE jogo')
except sqlite3.OperationalError:
pass
try:
cursor.execute('DROP TABLE usuario')
except sqlite3.OperationalError:
pass
criar_tabelas = '''
CREATE TABLE `jogo` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`nome` varchar(50) NOT NULL,
`categoria` varchar(40) NOT NULL,
`console` varchar(20) NOT NULL
);'''
try:
cursor.execute(criar_tabelas)
except sqlite3.OperationalError:
pass
criar_tabelas = '''
CREATE TABLE `usuario` (
`id` varchar(8) NOT NULL,
`nome` varchar(20) NOT NULL,
`senha` varchar(8) NOT NULL,
PRIMARY KEY (`id`)
);'''
try:
cursor.execute(criar_tabelas)
except sqlite3.OperationalError:
pass
# inserindo usuarios
cursor.executemany(
'INSERT INTO usuario (id, nome, senha) VALUES (?, ?, ?)',
[
('luan', 'Luan Marques', 'flask'),
('nico', 'Nico', '7a1'),
('danilo', 'Danilo', 'vegas')
])
cursor.execute('SELECT * FROM usuario')
print(' ------------- Usuários: -------------')
for linha in cursor.fetchall():
print(linha[1])
# inserindo jogos
cursor.executemany(
'INSERT INTO jogo (nome, categoria, console) VALUES (?, ?, ?)',
[
('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 jogo')
print(' ------------- Jogos: -------------')
for linha in cursor.fetchall():
print(linha[1])
# commitando senão nada tem efeito
conn.commit()
cursor.close()
input('\nAperte ENTER para continuar...')
dao_SQLite.py:
from models import Jogo, Usuario
import sqlite3
SQL_CRIA_JOGO = 'INSERT INTO jogo (nome, categoria, console) VALUES (?, ?, ?)'
SQL_ATUALIZA_JOGO = 'UPDATE jogo SET nome=?, categoria=?, console=? WHERE id = ?'
SQL_DELETA_JOGO = 'DELETE FROM jogo WHERE id = ?'
SQL_BUSCA_JOGOS = 'SELECT id, nome, categoria, console FROM jogo'
SQL_JOGO_POR_ID = 'SELECT id, nome, categoria, console FROM jogo WHERE id = ?'
SQL_USUARIO_POR_ID = 'SELECT id, nome, senha FROM usuario WHERE id = ?'
class JogoDao:
def __init__(self, database):
#não criei a conexão aqui pq o sqlite precisa usar a con. na mesma thread
self.__database = database
def salvar(self, jogo):
with sqlite3.connect(self.__database) as conn:
cursor = conn.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
conn.commit()
return jogo
def listar(self):
with sqlite3.connect(self.__database) as conn:
cursor = conn.cursor()
cursor.execute(SQL_BUSCA_JOGOS)
jogos = traduz_jogos(cursor.fetchall())
return jogos
def busca_por_id(self, id):
with sqlite3.connect(self.__database) as conn:
cursor = conn.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):
with sqlite3.connect(self.__database) as conn:
cursor = conn.cursor()
cursor.execute(SQL_DELETA_JOGO, (id, ))
conn.commit()
class UsuarioDao:
def __init__(self, database):
self.__database = database
def buscar_por_id(self, id):
with sqlite3.connect(self.__database) as conn:
cursor = conn.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])
início do jogoteca.py:
...
#from flask_mysqldb import MySQL
import sqlite3
...
app = Flask(__name__)
... #(onde ficaria as conf. do mysqldb do prof.)
database = 'jogoteca.db'
jogo_dao = JogoDao(database)
usuario_dao = UsuarioDao(database)
...