我正在尝试将定义中的字段条目中的变量传递给另一个条目,当按下按钮时接受我写入的变量 ID 并将其与数据库的 ID 进行比较,问题是当我尝试运行它我跳出这个错误:
obtener() missing 1 required positional argument: 'myid'
我的表格将以这种方式生成
micursor.execute("CREATE TABLE alumnos (ID INTEGER PRIMARY KEY AUTOINCREMENT, NOMBRE VARCHAR(20), APELLIDOS VARCHAR(20), PASSWORD VARCHAR(20), COMENTARIOS VARCHAR(100))")
def insertar():
conexionBBDD = sqlite3.connect("Form")
micursor = conexionBBDD.cursor()
nombre = entry_2.get()
apellidos = entry_3.get()
password = entry_4.get()
comentario = entry_5.get("1.0",END)
alumnoslist= [(nombre,apellidos,password,comentario)]
micursor.executemany(
'INSERT INTO alumnos(ID,NOMBRE,APELLIDOS,PASSWORD,COMENTARIOS)
VALUES(NULL,?,?,?,?)', alumnoslist)
conexionBBDD.commit()
这是我想要传递的变量
def leer():
id_ventana = Tk()
id_ventana.geometry('400x80')
label_6 = Label(id_ventana, text="ID",width=20,font=("bold", 10))
label_6.place(x=5,y=25)
entry_6 = Entry(id_ventana)
entry_6.place(x=120,y=25)
myid=entry_6.get()
Button(id_ventana, text='Aceptar',width=8,height=1,bg='gray',fg='white',command=obtener).place(x=280,y=20)
def obtener(myid):
micursor.execute('SELECT * FROM alumnos WHERE ID = ?',(myid,))
我尝试了这个,但什么也没做
MyID= StringVar()
def leer():
id_ventana = Tk()
id_ventana.geometry('400x80')
label_6 = Label(id_ventana, text="ID",width=20,font=("bold", 10))
label_6.place(x=5,y=25)
entry_6 = Entry(id_ventana,textvariable=MyID)
entry_6.place(x=120,y=25)
#micursor.execute('SELECT * FROM alumnos WHERE ID = ?',(entry_6.get(),))
Button(id_ventana, text='Aceptar',width=8,height=1,bg='gray',fg='white',command=obtener).place(x=280,y=20)
def getter ():
strsql = "SELECT * FROM alumnos WHERE ID = 1"
micursor.execute(strsql)
for i in micursor:
print(MyID)
print("ID= ", i[0])
print("Nombre= ", i[1])
print("Apellidos= ", i[2])
print("Password= ", i[3])
print("Comentarios= ", i[4])
MostrarID.set(i[0])
Nombre.set(i[1])
Apellidos.set(i[2])
Password.set(i[3])
entry_5.insert(1.0,i[4])
最佳答案
解决了传递变量的问题,您首先从函数中声明它,如下所示:
MyID= StringVar()
然后你在类中声明它是全局的,这样它就不是静态的并且可以改变: def leer():
global MyID
比较变量声明的情况
entry_6 = Entry(id_ventana, textvariable=MyID)
向用于比较的按钮添加 lambda 并传递输入 id 和窗口框架的字段
Button(id_ventana, text='Aceptar',command= lambda: obtener(entry_6.get(),id_ventana))
在用于执行您传递的sql语句的函数中
def obtener(MyID,id_ventana):
并比较
strsql = "SELECT * FROM alumnos WHERE ID = ?"
micursor.execute(strsql,MyID)
关于python - 将 Python 变量从一个函数传递到另一个函数,以将其与 SQL 数据库的变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59992634/