def salva(self): try: self._valida_valores() valores = f"'{self._inscricao.pega_aluno_id()}', \ '{self._inscricao.pega_curso_id()}'" linha = self._bd.salva_registro(self._tabela, self._campos, valores) aluno, curso = self._tuple_para_objeto(linha[0]) dao_aluno = DaoAluno(aluno, self._bd) aluno = dao_aluno.pega_por_id(aluno.pega_id()) dao_curso = DaoCurso(curso, self._bd) curso = dao_curso.pega_por_id(curso.pega_id()) aluno = self._inscricao.atualiza_aluno(aluno, curso) DaoAluno(aluno, self._bd).salva() except AlunoNaoEncontrado: raise AlunoNaoEncontrado("Aluno não encontrado.") except CursoNaoEncontrado: raise CursoNaoEncontrado("Curso não encontrado.") except Exception: raise ErroBancoDados()
def _cria_conexao(self): try: con = type(self)._conexao cur = con.cursor() return [con, cur] except Exception: raise ErroBancoDados("Não foi possível criar a conexão de banco.")
def deleta_tabela(self, tabela): try: items = self._cria_conexao() cur = items[1] cur.execute(f"drop table if exists {tabela}") except Exception: raise ErroBancoDados("Não foi possível deletar a tabela.")
def _liga_foreing_key_support(self): try: items = self._cria_conexao() cur = items[1] cur.execute("PRAGMA foreign_keys = OFF") except Exception: raise ErroBancoDados("Não foi possível ligar o foreing_key_support.")
def pega_registro_por_nome(self, tabela, nome): query = f"select * from {tabela} where nome = '{nome}'" mensagem_erro = "Não foi possível pegar o registro especificado." result = self._run(query, mensagem_erro) if result == []: raise ErroBancoDados(f"Registro especificado '{nome}' não foi encontrado.") else: return result
def pega_registro_por_id(self, tabela, id_): """Retorna a tupla da tabela identificada pelo id""" query = f"select * from {tabela} where id = {id_}" mensagem_erro = "Não foi possível pegar o registro especificado." result = self._run(query, mensagem_erro) if result == []: raise ErroBancoDados(f"Registro especificado de identificador {id_} não foi encontrado.") else: return result
def _run(self, query, mensagem_erro): """ Args: query (str): consulta sql a ser executada mensagem_erro (str): menssagem retornada em caso de erro na execução Returns: (tuple): tupla com os registros do banco de dados """ try: items = self._cria_conexao() con = items[0] cur = items[1] cur.execute(query) con.commit() return cur.fetchall() except Exception: raise ErroBancoDados(f"{mensagem_erro}\nquery: {query}")
def __init__(self, conexao=None): if type(self)._conexao is None: if conexao is not None: type(self)._conexao = conexao else: raise ErroBancoDados("Uma conexão precisa ser informada.")