将Python变量从一个函数传递到另一个函数,以将其与SQL数据库的变量进行比较

2024-05-15 03:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

按下按钮时,我试图将def中字段条目内的变量传递给另一个变量接受我写入变量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 obtener():

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])

Tags: idexecutegetdefplacelabelprintentry
1条回答
网友
1楼 · 发布于 2024-05-15 03:17:13

要传递变量,请先从函数中声明变量,如下所示:

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)

相关问题 更多 >

    热门问题