繁体   English   中英

从sqlite列表中获取信息

[英]Pulling information from a sqlite list

我有一个SQLite数据库,可以使用用户输入的TKinter小部件将多个信息点放入(名称,DOB,位置等)中。

我为用户创建了一个表格,它工作正常。 然后,我为管理员创建了一个“反向表单”。 它从数据库中提取数据并将其重新插入为只读格式,以便管理员可以准确查看其提交方式。

然后,我创建了一个搜索功能,可以显示数据库的基本结果。 然后,我使用了一个用于管理员的按钮,以单击通过反向形式显示更详细的信息。

我的问题是,当我拉出反向表格时,它只会拉出搜索结果中的最后一个条目以填写表格。 我需要为每个数据库条目提取相应的信息。

def retrieve_result(self):    

    con = sql_connect(self)
    self.data_retrieval = con.cursor()
    self.data_retrieval.execute('SELECT * FROM Raw_data WHERE first_name=(?)', (self.first_name_field.get(),))
    return self.data_retrieval.fetchall()

    sql_close(con)


def display_results(self):
    results = self.retrieve_result()

    for index, data_list in enumerate(results,10):
        Button(self.frame, text=(data_list[0] +" " + data_list[1]),
command=self.retrieve_form).grid(row=index+1, column=0)
        Label(self.frame, text=data_list[2]).grid(row=index+1, column=1)

        self.db_first_name = StringVar(value=data_list[0])
        self.db_last_name = StringVar(value=data_list[1])
        self.db_dob = StringVar(value=data_list[2])

def retrieve_form(self):

    self.first_name_field = Entry(self.frame, state=DISABLED, disabledbackground="gray95", disabledforeground="black",textvariable=self.db_first_name, bg="white") 
    self.first_name_field.grid(row=3, column=0, sticky=N) 

    self.last_name_field = Entry(self.frame, state=DISABLED, disabledbackground="gray95", disabledforeground="black", textvariable=self.db_last_name, bg="white")
    self.last_name_field.grid(row=3, column=1, sticky=N)

    self.age_field = Entry(self.frame, state=DISABLED, disabledbackground="gray95", disabledforeground="black", textvariable=self.db_dob, bg="white") 
    self.age_field.grid(row=5, column=0, sticky=N, padx=10)

代码要复杂得多,但是我想我已经捕获了所需的帮助。 就像我说的那样,我可以将所有数据库信息提取到内核中,但是表单仅检索数据库中的最后一个条目,而不是每个条目创建自己的唯一信息。

for -loop中,将所有值赋给相同的变量

    self.db_first_name = StringVar(value=data_list[0])
    self.db_last_name = StringVar(value=data_list[1])
    self.db_dob = StringVar(value=data_list[2])

这样您就只能拥有最后一个值。

使用这些值更好地分配给每个Button函数,以便每个Button都可以使用不同的值运行函数retrieve_form 它需要lambda函数来创建此函数,因为command期望函数不带参数。

def display_results(self):

    results = self.retrieve_result()

    for index, data_list in enumerate(results,10):

        a = data_list[0]
        b = data_list[1]
        c = data_list[2]

        Button(self.frame, 
            text=...,
            command=lambda x=a, y=b, z=c:self.retrieve_form(x, y, z)
        ).grid(...)

        Label(self.frame, text=...).grid(...)

并且函数必须获取值并与text=

def retrieve_form(self, a, b, c):

    self.first_name_field = Entry(self.frame, text=a, ...) 

    self.last_name_field = Entry(self.frame, text=b, ...)

    self.age_field = Entry(self.frame, text=b, ...) 

    # rest

lambda必须使用x=a, y=b, z=c因为lambda:self.retrieve_form(a, b, c)将对所有按钮使用相同的最后一个值。


可以使用index代替值,但是必须将值保留在self.results而不是`results中

def display_results(self):

    self.results = self.retrieve_result() # <-- self

    for index, data_list in enumerate(results,10):

        Button(self.frame, 
            text=...,
            command=lambda x=index:self.retrieve_form(x)
        ).grid(...)

        Label(self.frame, text=...).grid(...)


def retrieve_form(self, index):

    data_list =  self.results[index]

    a = data_list[0]
    b = data_list[1]
    c = data_list[2]

    self.first_name_field = Entry(self.frame, text=a, ...) 

    self.last_name_field = Entry(self.frame, text=b, ...)

    self.age_field = Entry(self.frame, text=b, ...) 

    # rest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM