Reset variable

Asked

Viewed 347 times

1

I am doing a search on the data anchor SQLITE3 inside my program and it returns values inside my variable, however when I make a condition to be executed for when the value is filled it returns empty, I am beginner in BD Python and Kivy:

class Studentdb(Boxlayout):

prim_nome = ObjectProperty()
ultimo_nome = ObjectProperty()
matricula = ObjectProperty()
lista_estudante = ObjectProperty()
bix1 = BoxLayout(orientation='vertical')
select = ()

def consultadb(self):
    # Limpa lista
    del self.lista_estudante.adapter.data[:]

    # Define var select pro caso dos retornos estarem brancos ele ainda estar setado como tupla
    # Acerta texto
    self.prim_nome.text = self.prim_nome.text.capitalize()
    self.prim_nome.text = self.prim_nome.text.strip()
    self.ultimo_nome.text = self.ultimo_nome.text.capitalize()
    self.ultimo_nome.text = self.ultimo_nome.text.strip()

    # Define se os campos estão preenchidos
    if self.prim_nome.text or self.ultimo_nome.text or self.matricula.text:
        # Consulta banco de dados
        if self.prim_nome.text == '*':
            select = cursor.execute('SELECT * FROM alunos2')
        elif self.prim_nome.text:
            select = cursor.execute('SELECT * FROM alunos2 WHERE nome = ?', [self.prim_nome.text])
        elif self.ultimo_nome.text:
            select = cursor.execute('SELECT * FROM alunos2 WHERE sobrenome = ?', [self.ultimo_nome.text])
        elif self.matricula.text:
            select = cursor.execute('SELECT * FROM alunos2 WHERE mat = ?', [int(self.matricula.text)])
        # Se o retorno estiver em branco exibe critica
        # Coloquei esse print pra ver o valor retornado para a consulta e aqui ele parece preenchido
        print("Primeiro ponto variavel preenchida ")
        print(tuple(select))

        if tuple(select) == ():
            # coloquei esse print pra ver o valor retornado dentro da função e aqui ele está vazio...
            print("Segundo ponto em branco")
            print(tuple(select))
            self.bix1.add_widget(Label(text='Aluno não encontrado'))
            self.bix1.add_widget(Button(text='Ok', on_press=lambda x: popup.dismiss()))
            popup = Popup(title='Não encontrado', content=self.bix1,
                          size_hint=(None, None), size=(200, 150), auto_dismiss=True)
            popup.open()
        # Se o retorno estiver ok então popula tabela com cada um dos valores retornados
        else:
            print(tuple(select))
            for i in select:
                print('entrei no for')
                dads = i
                nome_aluno = dads[1] + ' ' + dads[2]
                # incluir a informação na lista
                self.lista_estudante.adapter.data.extend([nome_aluno])
                # resetar a lista
                self.lista_estudante._trigger_reset_populate()

The prints appear like this:

First filled variable point (1, 'Filipe', 'Alves'), (3, 'Filipe', 'Ferreira'))

Second blank point ()

1 answer

1

Where you have the prints, switch to:

print("Primeiro ponto variavel preenchida ")
alunos = tuple(select)
print(alunos)

if len(alunos) <= 0:

When you use tuple(select)), you run select twice. For some reason, your cursor may be returning blank in the second query.

To see if the tuple is empty, it is better to use Len than o == ().

Browser other questions tagged

You are not signed in. Login or sign up in order to post.