コード例 #1
0
    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()
コード例 #2
0
 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.")
コード例 #3
0
 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.")
コード例 #4
0
 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.")
コード例 #5
0
 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
コード例 #6
0
 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
コード例 #7
0
    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}")
コード例 #8
0
 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.")