使用tkinter optionbox执行mysql查询

k3bvogb1  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(265)

我正在尝试使用tkinter选项菜单来选择要在表中搜索的变量。然而,当传递的变量不产生任何结果时,问题就出现了。
这是table:

这里证明了sql语法是正确的。

问题是由于字符串变量不正确并返回:

[]

没有数据。
当我从选项菜单中选择一个变量时,不是得到:

jhgfds

我得到:

('jhgfds',)

所以我没有得到任何结果是可以理解的。
我曾尝试在以下方面使用这些方法:
创建非tkinter变量(streditevent) 这个re方法 这个[2:-3]` 方法
然而,这些都没有奏效

import tkinter as tk
import mysql.connector
root=tk.Tk()
EventList=[]

def OptionChanged(*args):
    EventSQL=("SELECT * FROM events WHERE eventname=%s")
    print(EditEvent.get())
    StrEditEvent=EditEvent.get()
    print(StrEditEvent)
    mycursor.execute(EventSQL,(StrEditEvent,))
    myresults=mycursor.fetchall()
    print(myresults)

# Adding Tracking Variable EditEvent

EditEvent = tk.StringVar()
EditEvent.trace("w", OptionChanged)

# Connecting To My Database

mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    passwd="Cranmore1",
    database="scoutsdatabase"
)
print(mydb)
mycursor = mydb.cursor()

mycursor.execute("SELECT eventname FROM events")
myresults=mycursor.fetchall()
for i in myresults:
    EventList.append(i)
EventToEditOptionMenu = tk.OptionMenu(root,EditEvent,*EventList)
EventToEditOptionMenu.grid(row=1,column=1)

root.mainloop()

任何帮助都将不胜感激。
打印(事件列表)

[('jhgfds',), ('uytrds',), ('sadfghjk',), ('jhytre',), ('j',), ('h',), ('q',), ('BBC',), ('BBC',), ('qwed',)]
wgxvkvu9

wgxvkvu91#

我终于找到答案了!要从元组中获取字符串,必须使用 map() 命令。

def OptionChanged(*args):
        EventSQL=("SELECT * FROM events WHERE eventname=%s")
        StrEditEvent=EditEvent.get()
        start,mid,end=map(str,StrEditEvent.split("'"))
        print(mid)
        mycursor.execute(EventSQL,(mid,))
        myresults=mycursor.fetchall()
        print(myresults)

因此 ('jhgfds',) 转换为 jhgfds 因此sql查询从数据库中查找数据。

qlckcl4x

qlckcl4x2#

得到结果 jhgfds 您需要对它进行迭代,因为它以元组的形式返回查询的结果 [('jhgfds',), ('uytrds',), ('sadfghjk',), ('jhytre',), ('j',), ('h',), ('q',), ('BBC',), ('BBC',), ('qwed',)] 您可以使用索引来获得所需的特定结果 result[0] 或者 result[2] ```
def OptionChanged(*args):
EventSQL=("SELECT * FROM events WHERE eventname=%s")
print(EditEvent.get())
StrEditEvent=EditEvent.get()
print(StrEditEvent)
mycursor.execute(EventSQL,(StrEditEvent,))
myresults=mycursor.fetchall()

for result in myresults: # iterate over it
    print(result)
    print(result[2])
    print(result[5])

相关问题