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

标签 python sql

我正在尝试将定义中的字段条目中的变量传递给另一个条目,当按下按钮时接受我写入的变量 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/

相关文章:

python - 如何识别图像并点击它们

MySQL 显示其他列中每个不同值的最新日期的行?

sql - 查询中的舍入错误?

仅限制记录子集的 SQL 查询

sql - 使用 Dapper 时关闭连接

php - 从多对多表中获取对应值和非对应值

python - 将列表中的 float 替换为 '0'

python - 在 Python 中使用原始文档字符串的部分函数应用程序?

python - 为什么 pipenv 无法在 docker 容器中安装包

python - 正在定义的类型对象的类型提示