gallows Posted May 26, 2014 at 11:01 AM Report #556968 Posted May 26, 2014 at 11:01 AM (edited) Ola pessoal sou novo aqui no fórum e também novo no Python.... estou com um problema para me conectar com o banco de dados do sqlite3 e o seguinte estou criando um programa e quero que o mesmo tenha uma tela de login e que ela esteja conectada ao banco de dados só que não estou conseguindo fazer pesquisas de usuários sempre da erro... ex: def login(self): nome = self.nome.get() # entry nome senha = self.senha.get() # entry senha banco = self.c.cursor() # cursor for nome and senha in banco: self.janela.destroy() # se o nome e a senha estiver certos a janela login ira ser destruída Programa() # abrira o programa assim que a janela login for destruída estou fazendo assim alguém poderia me dizer por favor como fazer uma pesquisa de nome e senha no banco de dados? Edited May 26, 2014 at 03:07 PM by thoga31 GeSHi
bioshock Posted May 26, 2014 at 11:25 AM Report #556970 Posted May 26, 2014 at 11:25 AM De certeza que haverão outros utilizadores mais indicados para te ajudar, mas eu aqui à uns valentes tempos mexi em Python e olhando para o teu código actual não te vejo a fazer nenhuma query à base de dados. Portanto, penso que o que tu queiras seja algo dentro deste género (atenção não testado): def login(self): nome = self.nome.get() senha = self.senha.get() cr = self.c.cursor() cr.execute("SELECT COUNT(id) FROM utilizadores WHERE nome = %s AND senha = %s", [nome], [senha]) values = cr.fetchone() if values[0] <= 0: return False # Não existe utilizador return True Não me lembro se [nome], [senha] está correcto ou se deveria antes ser [nome, senha] Experimenta e diz qualquer coisa. 1 Report
gallows Posted May 26, 2014 at 05:30 PM Author Report #557017 Posted May 26, 2014 at 05:30 PM (edited) Ola bioshock desde já agradeço por estar me ajudando ^^ então... tentei usar o código que você me mandou mas não funcionou acho que sou eu que estou fazendo errado fiz um código para teste vou te mandar ele... # -*- coding:UTF-8 -*- from Tkinter import* import sqlite3 class login: def __init__(self, janela1): self.conectar = sqlite3.connect("USUARIO.db") self.c = self.conectar.cursor() self.c.execute("""CREATE TABLE IF NOT EXISTS usuario(nome TEXT(30),senha TEXT(10))""") self.conectar.commit() self.janela1 = janela1 self.caixa=Frame(self.janela1) self.caixa.grid() self.l1=Label(self.caixa, text='nome:') self.l1.grid(row=1) self.l2=Label(self.caixa, text='senha:') self.l2.grid(row=2) self.en1=Entry(self.caixa) self.en1.grid(row=1, column=1) self.en2=Entry(self.caixa) self.en2.grid(row=2, column=1) self.bo=Button(self.caixa, text='Entrar', command=self.entrar) self.bo.grid(column=1) def entrar(self): nome = self.en1.get() senha = self.en2.get() self.c = self.conectar.cursor() self.c.execute("SELECT FROM usuario WHERE nome = %s AND senha = %s", [nome], [senha]) values = self.c.fetchone() if values[0] <= 0: self.janela1.destroy() Programa() #if senha =='1': #self.janela1.destroy() #Programa() class sisbase: def __init__(self, janela): self.janela = janela caixa=Frame(self.janela) caixa.grid() def Login(): raiz=Tk() acesso=login(raiz) raiz.mainloop() def Programa(): raiz=Tk() raiz.geometry('400x327') acesso=sisbase(raiz) raiz.mainloop() Login() Edited May 26, 2014 at 05:31 PM by thoga31 Tags code + GeSHi
bioshock Posted May 26, 2014 at 06:02 PM Report #557019 Posted May 26, 2014 at 06:02 PM Que erro te é dado? Quando escreveste o código que colocaste no tópico, nos comentários disseste o seguinte: self.janela.destroy() # se o nome e a senha estiver certos a janela login ira ser destruída Programa() # abrira o programa assim que a janela login for destruída Ora, significa que o login foi feito com sucesso, correcto? No entanto, a linha if values[0] <= 0: significa que o login está incorrecto...e não é isto que queres. Podes sempre trocar para: if values[0] >= 1: self.janela1.destroy() Programa()
gallows Posted May 26, 2014 at 07:28 PM Author Report #557034 Posted May 26, 2014 at 07:28 PM (edited) Céus nao esta dando certo quando tento com ("SELECT FROM usuario WHERE nome = %s AND senha = %s", [nome], [senha]) da erro no [nome], [senha] diz que não e uma str quando tento fazer sem o else: da para colocar qualquer coisa e acessar o programa mas não e isso que eu quero não e! mas quando colocar a messagebox não da para ter acesso algum. # -*- coding:UTF-8 -*- from Tkinter import* import sqlite3 import os import tkMessageBox class login: def __init__(self, janela1): self.conectar = sqlite3.connect("USUARIO.db") self.c = self.conectar.cursor() self.c.execute("""CREATE TABLE IF NOT EXISTS usuario(nome TEXT(30),senha TEXT(10))""") self.c.execute("INSERT INTO usuario VALUES ('admin','admin')") self.conectar.commit() self.tentativas=3 self.janela1 = janela1 self.caixa=Frame(self.janela1) self.caixa.grid() self.l1=Label(self.caixa, text='nome:') self.l1.grid(row=1) self.l2=Label(self.caixa, text='senha:') self.l2.grid(row=2) self.en1=Entry(self.caixa) self.en1.grid(row=1, column=1) self.en2=Entry(self.caixa) self.en2.grid(row=2, column=1) self.bo=Button(self.caixa, text='Entrar', command=self.entrar) self.bo.grid(column=1) def entrar(self): nome = self.en1.get() senha = self.en2.get() self.c = self.conectar.cursor() self.c.execute("SELECT nome AND senha FROM usuario") values = self.c.fetchone() if values[0] >= 1: self.janela1.destroy() Programa() else: self.tentativas=self.tentativas-1 tkMessageBox.showerror('Usuario ou senha invalido', 'Este usuario não existe ou a senha é invalida.\nVocê só pode tentar mais %i vezes' %self.tentativas) if self.tentativas <=0: self.janela1.destroy() class sisbase: def __init__(self, janela): self.janela = janela caixa=Frame(self.janela) caixa.grid() def Login(): raiz=Tk() acesso=login(raiz) raiz.mainloop() def Programa(): raiz=Tk() raiz.geometry('400x327') acesso=sisbase(raiz) raiz.mainloop() Login() peso desculpas por incomodar mais uma vez meu querido, não só por não estar entendendo mas também por mandar o código inteiro. Edited May 26, 2014 at 07:36 PM by thoga31 Tags code + GeSHi
thoga31 Posted May 26, 2014 at 07:37 PM Report #557036 Posted May 26, 2014 at 07:37 PM Cuidado com a formatação dos posts e a colocação do código. Para colocar o código, vê este tópico de ajuda. Knowledge is free!
bioshock Posted May 26, 2014 at 07:41 PM Report #557037 Posted May 26, 2014 at 07:41 PM Por acaso deste-te ao trabalho de perceber o erro? Só mesmo por acaso.. E achas que isto self.c.execute("SELECT nome AND senha FROM usuario") faz sentido? E o erro que te dá, eu falei-te sobre ele no meu 1º post. Não me lembro se [nome], [senha] está correcto ou se deveria antes ser [nome, senha] http://lmgtfy.com/?q=python+parameterized+query
gallows Posted May 27, 2014 at 10:42 AM Author Report #557083 Posted May 27, 2014 at 10:42 AM Ola amigos, peço desculpas pela demora em responder quanto a você thoga31, agradeço por sua advertência e pode ter certeza que já estou estudando as regras para que isso não venha acontecer mais ^^. bioshock, realmente não tem nexo algum oque eu fiz, infelizmente o jeito que tentei também [nome, senha] não deu certo, diz que isso não e uma str, acho que vou deixar o programa livre mesmo já que não estou conseguindo, gostaria de agradecer a todos pela atenção e sei que achei um ótimo fórum, estão de parabéns pelo trabalho que estão fazendo.
bioshock Posted May 27, 2014 at 10:46 AM Report #557085 Posted May 27, 2014 at 10:46 AM Oh homem, começa a ler o que as pessoas te dizem e, principalmente, a seguir os links que te são dados. Na primeira procura do google do link que te dei tens a resposta. http://stackoverflow.com/questions/1633332/how-to-put-parameterized-sql-query-into-variable-and-then-execute-in-python
Solution gallows Posted May 30, 2014 at 12:16 PM Author Solution Report #557669 Posted May 30, 2014 at 12:16 PM (edited) Bom Dia! desculpe não responder ao tópico antes, quero agradecer a ajuda de todos e dizer que a ajuda de vocês foi crucial para o meu aprendizado, peço desculpas por não entender de cara oque me falavam e que como disse tenho pouco tempo de python e de programação coisas de alguns meses... e quero dizer também que resolvi o meu problema juntamente com um grande amigo lario diniz, e quero disponibilizar aqui o código para que se alguém mais aparecer com o mesmo problema saiba como resolve-lo também! # -*- coding:UTF-8 -*- from ttk import * from Tkinter import * import tkMessageBox import sqlite3 import os def dic_bd(bd, tabela): """ Função que recebe o banco de dados como string (bd) e o nome da tabela como string (tabela) e retorna um dicionario com todos os itens da tabela consultada. """ conect=sqlite3.connect(bd) c = conect.cursor() a={} for i in c.execute("SELECT * FROM %s" %tabela): a[i[0]]=[i[1],i[2]] conect.close() return a #Criando banco de dados #====================================================================# conectar = sqlite3.connect("banco_dados.db") c = conectar.cursor() c.execute("""CREATE TABLE IF NOT EXISTS produtos(id_produto INTEGER PRIMARY KEY AUTOINCREMENT, produto TEXT,ean REAL,ncm REAL)""") c.execute("""CREATE TABLE IF NOT EXISTS usuarios(id_usuario INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,senha TEXT)""") a=dic_bd("banco_dados.db", "usuarios") if a == {}: c.execute("INSERT INTO usuarios VALUES (NULL,?,?)",("admin","admin")) conectar.commit() conectar.close () #====================================================================# def center(win): #funçao para centralizar win.update_idletasks() width = win.winfo_width() frm_width = win.winfo_rootx() - win.winfo_x() win_width = width + 2 * frm_width height = win.winfo_height() titlebar_height = win.winfo_rooty() - win.winfo_y() win_height = height + titlebar_height + frm_width x = win.winfo_screenwidth() // 2 - win_width // 2 y = win.winfo_screenheight() // 2 - win_height // 2 win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) class login: acesso=0 def __init__(self, janela): #==========================Configurações=============================# self.tentativas=3 fonte = ('Arial','14') fontb = ('Arial','12') self.janela = janela self.janela.resizable(width=False, height=False) self.janela.title('Login') #==============================Frames================================# frame=Frame(self.janela,borderwidth=3, relief=RAISED) frame.pack(pady = 2, padx=2) titulo=Frame(frame) titulo.pack(pady = 1, padx=1) caixa=Frame(frame) caixa.pack(pady = 1, padx=1) #=============================Widgets================================# titulosis=Label(titulo, text='TESTE', font=fonte, fg="darkblue", width=13).grid(row=1, column=1, sticky=W, pady=3) name=Label(caixa, text='Nome').grid(row=1, column=1, sticky=W, pady=3) senha=Label(caixa, text='Senha').grid(row=2, column=1, sticky=W, pady=3) self.entry_name=Entry(caixa, width=10) self.entry_name.grid(row=1, column=2, sticky=W, pady=3) self.entry_name.focus_force() self.entry_senha = Entry(caixa, width=10, show='*') self.entry_senha.grid(row=2, column=2, sticky=W, pady=3) entrar=Button(caixa, width=8, command=self.Entrar, text="Entrar") entrar.grid(row=3, column=1, sticky=W, pady=3) sair=Button(caixa, width=8, command=self.Sair, text="Sair") sair.grid(row=3, column=2, sticky=W, pady=3) def Entrar(self): loguin = self.entry_name.get() senha = self.entry_senha.get() a=dic_bd("banco_dados.db", "usuarios") con=0 for i in a: if a[i][0] == loguin: if a[i][1] == senha: con=1 if con==1: self.janela.destroy() Programa() else: self.tentativas=self.tentativas-1 tkMessageBox.showerror('Senha ou usuario invalido', 'Este usuario ou esta senha é invalida.\nVocê só pode tentar mais %i vezes' %self.tentativas) if self.tentativas <=0: self.janela.destroy() def Sair(self): self.janela.destroy() class teste: def __init__(self, janela): #==========================Configurações=============================# self.abas = Notebook(janela) janela.resizable(width=False, height=False) janela.title('teste') font = ('Arial','14') fontb = ('Arial','12') #==============================Frames================================# caixa=LabelFrame(self.abas) caixa.grid(pady=5) caixa2=LabelFrame(self.abas) caixa2.grid() #=============================Widgets================================# self.abas.add(caixa,text='Pessoal') self.abas.add(caixa2,text='Cadastros') #abas.add(self.frame_aba3,text='Util') self.abas.grid() def Login(): raiz=Tk() acesso=login(raiz) center(raiz) raiz.mainloop() return acesso.acesso def Programa(): raiz=Tk() raiz.geometry('500x400') acesso=teste(raiz) center(raiz) raiz.mainloop() Login() espero que seja útil para mais alguém!!!!! Resolvido! Edited May 30, 2014 at 12:38 PM by gallows
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now