如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?

Posted

技术标签:

【中文标题】如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?【英文标题】:How to get different values from different tables in Treeview / Tkinter (SQLite)? 【发布时间】:2021-05-31 09:16:39 【问题描述】:

我一直在使用 Tkinter,我试图从 Treeview 中的不同表中获取不同的列,我使用 SQLite 作为数据库,在我的第一个名为 registers 的表中我得到了不同我的第二个名为 attendance 的表中的列 身份证、姓名、姓氏、手机、地址、电子邮件等 我用来按 ID 号存储我的条目出勤率我的意思是我有两个条目cardin = entry1cardout = entry1 因此,如果我的其中一个条目与我的 注册表 idcard 匹配,它会自动将 idcard、timein、timeout、date 存储在我的 出席中table 直到它运行良好,但我无法从我的第一个表 registers 中获取 names, surnames 列 并将它们存储在我的第二个表中 attendace 与我的 idcard, timein, timeout, date 相同(idcard, names, surnames 必须与第一个表匹配),我试图解决它但我失败了,我真的不知道怎么做,任何帮助都提前。祝你有美好的一天。这是我的代码:

def botoningreso():

    time = datetime.now().strftime("%I:%M%p")
    date = datetime.now().strftime("%d/%m/%Y")

    conn = sqlite3.connect('database.db')
    c = conn.cursor()

    cardin = entry1.get()
    cardout = entry2.get()

    c.execute('SELECT * FROM registers WHERE idcard = ? OR idcard = ?', (cardin, cardout))

    if c.fetchall():
        messagebox.showinfo(title='ID Registered', message='Registered Succefully')
        c.execute("INSERT INTO attendance (timein, idcard, date) VALUES (?, ?, ?)", (time, cardin, date)) #Here i also wanto to save *names and surnames* from the first table *registers* that match with the idcard column.
        conn.commit()

    else:
        messagebox.showerror(tittle=None, message='Wrong ID card')

    c.close() 

【问题讨论】:

简而言之,您想从第一个表中获取用户名和姓氏,该表的 id 插入到第二个表中? @CoolCloud 是的,直到现在,当我输入存储在我的第一个数据表中的正确 ID 卡后,我的第二个表中才获得 idcard、timein、timeout 和 date print(c.fetchall()if 之前的输出是什么。 @CoolCloud 我之前试过print(c.fetchall() if 但它没有给我任何价值 这不是说你的查询没有返回任何结果而且是错误的吗? 【参考方案1】:

为获取的数据分配一个变量,然后对其进行索引并继续:

data = c.fetchall()

if data:
    username = data[0][1] # Access username from fetched list
    surname = data[0][2] # Access surname

    messagebox.showinfo(title='ID Registered', message='Registered Succefully')
    c.execute("INSERT INTO attendance (timein,idcard,date,user,sur) VALUES (?,?,?,?,?)", (time,cardin,date,username,surname)) 
    conn.commit()

将变量分配给c.fetchall() 很重要,因为它的行为类似于生成器对象,并且一旦使用就会丢失其项目。

【讨论】:

以上是关于如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter,treeview不会调整大小

如何使用 Tkinter 清除整个 Treeview

tkinter中treeview隔行显示不同的颜色

python中tkinter treeview如何获取选中的条目

如何在 tkinter.ttk Treeview 上完全更改背景颜色

在尝试搜索数据库中的名称时遇到Tkinter Treeview和SQLite的问题