select查询结果在treeview更新中不正确

hs1ihplo  于 2021-06-15  发布在  Mysql
关注(0)|答案(0)|浏览(202)

这是一个相当复杂的问题,我将尽力为您提供尽可能多的数据/代码。感谢您的帮助。
上下文

这是一个tkinter框架,用户可以为它分配一个徽章给一个侦察兵。如您所见,它由三个不同的ttk.treeviews组成。一个包含在mysql表的badge表中找到的所有badge名称,另一个同样包含在mysql数据库的patrol表中找到的所有patrol名称。
选择巡逻时,最后一个树视图中将显示一个名称列表。这些是属于那个巡逻队的侦察兵。
例子:

作为。。。


问题
当按下返回键时,将调用一个函数,该函数应:
清除包含侦察兵姓名的树视图
通过在owned badges表中创建新行,将徽章分配给scout
将所选巡逻队中尚未收到徽章的所有侦察兵的姓名返回到树视图。
总的效果是,当选中scout并按下return键时,该scout被移除,其他scout留在treeview中。不过,请记住,可以选择多个童子军
以下是按下返回键时执行的功能。

def selectScout():
    global SelectedBadgeStr
    global SelectedPatrolStr
    Values=[]
    if SelectedPatrol.get()==("Selected Patrol: Please Select A Patrol"):
        tk.messagebox.showerror("ERROR","Please select a Patrol")
        return
    if SelectedBadge.get()==("Selected Badge: Please Select A Badge"):
        tk.messagebox.showerror("ERROR", "Please select a Badge")
        return
    print(SelectedBadgeStr)
    curItems = SelectScoutView.selection()
    for i in curItems:
        Values.append(SelectScoutView.item(i)['values'])
    print(Values)
    for i in Values:
        print(SelectedBadgeStr)
        print(i)
        print(i[0])
        print(i[1])
        print(type(i))
        print(type(i[0]))
        Test=("Test")
        print(repr(i[0]))
        GetBadgeID=("SELECT badgeID FROM badges WHERE badgename=%s")
        mycursor.execute(GetBadgeID,(SelectedBadgeStr,))
        BadgeID=mycursor.fetchone()
        print(BadgeID)
        GetScoutID=("SELECT scoutID FROM scoutinfo WHERE firstname=%s AND secondname=%s")
        mycursor.execute(GetScoutID,(i[0],i[1]))
        ScoutID=mycursor.fetchone()
        UpdateOwnedBadgesB="INSERT INTO ownedbadges (badgeID,scoutID) VALUES(%s,%s) "
        mycursor.execute(UpdateOwnedBadgesB,(BadgeID[0],ScoutID[0]))
        mydb.commit()
    #Removing Those Who Now Own The Badge
    ScoutNameList=[]
    Remove = SelectScoutView.get_children()
    for child in Remove:
        SelectScoutView.delete(child)
    print("The Badge:",SelectedBadgeStr,"ID Is",BadgeID[0])
    ScoutIDSWhoOwnBadge=("SELECT scoutID FROM ownedbadges WHERE badgeID=%s")
    mycursor.execute(ScoutIDSWhoOwnBadge,(BadgeID[0],))
    BadgeScoutIDS=mycursor.fetchall()
    print("BadgeScoutIDS")
    print(BadgeScoutIDS)
    for i in BadgeScoutIDS:
        print(i)
        print(i[0])
        print(repr(i[0]))
        ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
        mycursor.execute(ScoutNames,(i[0],))
        print("SELECT QUERY RESULTS:")
        print(mycursor.fetchall())
        Name=mycursor.fetchall()
        print("Should Be Names Below:")
        print(Name)
        ScoutNameList.append(Name)
    print(ScoutNameList)
    ScoutNamesByPatrol=("SELECT firstname,secondname FROM scoutinfo WHERE patrolID=(SELECT patrolID FROM patrols WHERE patrolname=%s)")
    mycursor.execute(ScoutNamesByPatrol,(SelectedPatrolStr,))
    ScoutNamedFromPatrol=mycursor.fetchall()
    print(ScoutNamedFromPatrol)
    print("Done")
    return

(我很清楚,这个函数不能满足将数据插入到treeview中的要求)
错误出现在

Name=mycursor.fetchall()

错误:

mysql.connector.errors.InterfaceError: No result set to fetch from.

发生此错误的原因是select查询:

ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
mycursor.execute(ScoutNames,(i[0],))

产量:

[(0,)]

而不是童子军的名字和第二个名字。尽管 (i[0],)) = 51 或同等的童子军身份证。
结果
我现在给你举个例子,让你更好地理解这个问题。

你可以看到徽章“追踪徽章”已经被选中,巡逻“豹”已经被选中,侦察“罗里阿达尔”已经被选中。我们想把追踪徽章交给黑豹巡逻队的罗里·阿代尔
预期结果:
树视图中包含“rory adair”的行被删除,剩下两个没有在树视图中收到徽章的其他童子军。
“rory adair”的scoutid将与badgeid一起添加到ownedbadges表中。
实际结果:
树视图中的所有行都将被删除
ownedbadges表已成功修改,如下所示。

(忽略“received”列,因为它的用途还没有定义……(我知道他们没有代码将行/scoutnames bck添加到treeview中,但是在问题解决之前,我不能添加到这个)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题