这是我的代码。当我尝试运行此代码时。我面临以下错误。任何人都可以建议我如何纠正该错误,这个脚本可以成功运行。
from tkinter import *
import sqlite3
global a, b
def sair_mestre ():
global mestre
mestre.quit()
def criar_tabela():
c.execute("CREATE TABLE IF NOT EXISTS Registro (Nome text, Senha text)")
def receberl():
global Nome, Senha
Nome = entradalogin.get()
Senha = entradasenha.get()
ler_dados(Senha)
if x:
sucesso = Label(mestre, text="Login Realizado com sucesso!")
sucesso.grid(row=1,column=1)
else:
inexistente = Label(mestre, text="Login errado")
inexistente.grid(row=1, column=1)
def receber2():
logincadastro2 = entradalogin2.get()
senhacadastro2 = entradasenha2.get()
c.execute("INSERT INTO Registro VALUES(?, ?)", (logincadastro2, senhacadastro2)) # Utilização de Variáveis
conexao.commit()
cadastro.destroy()
realizado = Label(mestre, text="Cadastrado com sucesso")
realizado.grid(row=1, column=1)
botaorealizado = Button(mestre, text="Ok", command=sair_mestre)
botaorealizado.grid(row=2, column=1)
def registro():
programa.destroy()
global cadastro
cadastro = Frame(mestre)
cadastro.grid()
realizando_cadastro = Label(cadastro, text="Realizando Cadastro...")
realizando_cadastro.grid(row=0, column=1)
labellogin = Label(cadastro, text="Login")
labellogin.grid(row=1, column=0)
labelsenha = Label(cadastro, text="Senha")
labelsenha.grid(row=2, column=0)
global entradalogin2
entradalogin2 = Entry(cadastro)
entradalogin2.grid(row=1, column=1)
global entradasenha2
entradasenha2 = Entry(cadastro, show="•")
entradasenha2.grid(row=2, column=1)
botaocadastro = Button(cadastro, text="Ok", command=receber2)
botaocadastro.grid(row=3, column=1)
def ler_dados (valorbusca):
global row
global x
buscar_dados = "SELECT * FROM Registro WHERE Nome = ? AND Senha = ?"
for row in c.execute(buscar_dados, (valorbusca,)):
if Nome and Senha in row:
x = True
conexao = sqlite3.connect("Registro_Cadastro.db")
c = conexao.cursor()
criar_tabela()
mestre = Tk()
programa = Frame(mestre)
programa.grid()
login = Label(programa, text="Login")
login.grid(row=0, column=0)
global entradalogin
entradalogin = Entry(programa)
entradalogin.grid(row=0, column=1)
senha = Label(programa, text="Senha")
senha.grid(row=1, column=0)
global entradasenha
entradasenha = Entry(programa, show="•")
entradasenha.grid(row=1, column=1)
botaook = Button(programa, text="Entrar",command= receberl)
botaook.grid(row=2, column=1)
botaoregistro = Button(programa, text="Cadastro",command= registro)
botaoregistro.grid(row=3,column=1)
mestre.mainloop()
这是我的程序抛出的错误。任何人都可以帮我解决这个错误吗?
我认为错误发生在receberl
函数中。
File "-------", line 1558, in __call__
return self.func(*args)
File "------", line 17, in receberl
ler_dados(Senha)
File "------", line 69, in ler_dados
for row in c.execute(buscar_dados, (valorbusca,)):
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 1 supplied.
答案 0 :(得分:3)
您收到的错误消息非常清楚:您的SELECT
查询绑定了两个参数,但您的代码仅指定其中一个参数。要解决此问题,请先将呼叫更改为ler_dados()
以传入用户名和密码:
def receberl():
global Nome, Senha
Nome = entradalogin.get()
Senha = entradasenha.get()
ler_dados(Nome, Senha)
# ... etc.
然后在您的查询中绑定用户名和密码:
def ler_dados(username, valorbusca):
global row
global x
buscar_dados = "SELECT * FROM Registro WHERE Nome = ? AND Senha = ?"
for row in c.execute(buscar_dados, (username, valorbusca,)):
if Nome and Senha in row:
x = True
答案 1 :(得分:2)
您需要为此查询提供2个参数:
buscar_dados = "SELECT * FROM Registro WHERE Nome = ? AND Senha = ?"
当你在ler_dados(Senha)
函数中调用receberl
时,似乎缺少Nome
。
你应该首先使用:ler_dados(Nome, Senha)
然后将方法ler_dados
更改为:
def ler_dados (nome, senha):
global row
global x
buscar_dados = "SELECT * FROM Registro WHERE Nome = ? AND Senha = ?"
for row in c.execute(buscar_dados, (nome, senha)):
if Nome and Senha in row:
x = True