Python 将不同表中的多条记录合并为一个字符串
我试图使用studentID从一个表中获取他们的名字和姓氏,然后使用HomeworkID获取他们其中一个作业的结果,并使用tkinter将结果显示在listbox小部件中。当然,在它被显示之前,我首先需要能够获得数据。 这就是我迄今为止所做的:Python 将不同表中的多条记录合并为一个字符串,python,sqlite,tkinter,Python,Sqlite,Tkinter,我试图使用studentID从一个表中获取他们的名字和姓氏,然后使用HomeworkID获取他们其中一个作业的结果,并使用tkinter将结果显示在listbox小部件中。当然,在它被显示之前,我首先需要能够获得数据。 这就是我迄今为止所做的: def viewresults (self, sethw): print (self.Homework_To_Set.get()) #resultslist = [] conn = sqlite3.co
def viewresults (self, sethw):
print (self.Homework_To_Set.get())
#resultslist = []
conn = sqlite3.connect('MyComputerScience.db')
c = conn.cursor()
homeworkID = c.execute("SELECT HWID FROM HomeworkInfo WHERE HomeworkName = ?", (self.Homework_To_Set.get(), )).fetchone()
studentsnamecheck = c.execute("SELECT StudentID FROM HomeworkSet WHERE HWID = ?", ((homeworkID[0], ))).fetchall()
if len(studentsnamecheck) == 0:
self.View_Results.insert(END, "No one has completed this homework!")
else:
for x in studentsnamecheck:
c.execute("SELECT FName || ' ' || SName FROM users WHERE UserID = ?", (str(x), ))
res1 = (c.fetchall())
for i in (studentsnamecheck):
result_collect = c.execute("SELECT Results FROM HomeworkSet WHERE StudentID = ? AND HWID = ?", ((str(i)), self.Homework_To_Set.get() ))
var_insert_results = ((res1), (result_collect))
self.View_Results.insert(END, str(var_insert_results))
这是电流输出:
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
([], <sqlite3.Cursor object at 0x000001F40E1809D0>)
您的代码中有几个问题:
c.execute("SELECT FName || ' ' || SName FROM users WHERE UserID = ?", (str(x), ))
res1 = (c.fetchall())
for i in (studentsnamecheck):
result_collect = c.execute("SELECT Results FROM HomeworkSet WHERE StudentID = ? AND HWID = ?",
((str(i)), self.Homework_To_Set.get() ))
表中没有users
字段;它可能是UserID
用户名
应该是str(x)
x[0]
- 应该循环通过
而不是res1
studentsnamecheck
应该是str(i)
x[0]
应该是self.journalization\u To\u Set.get()
homeworkind[0]
def viewresults(self, sethw):
print(self.Homework_To_Set.get())
conn = sqlite3.connect('MyComputerScience.db')
c = conn.cursor()
homeworkID = c.execute("SELECT HWID FROM HomeworkInfo WHERE HomeworkName = ?",
(self.Homework_To_Set.get(),)).fetchone()
studentsnamecheck = c.execute("SELECT StudentID FROM HomeworkSet WHERE HWID = ?",
(homeworkID[0],)).fetchall()
if len(studentsnamecheck) == 0:
self.View_Results.insert(END, "No one has completed this homework!")
else:
for x in studentsnamecheck:
c.execute("SELECT FName||' '||SName FROM users WHERE username = ?", (x[0],))
res1 = c.fetchall()
for i in res1:
results = c.execute("SELECT Results FROM HomeworkSet WHERE StudentID = ? AND HWID = ?",
(x[0], homeworkID[0])).fetchone()
self.View_Results.insert(END, '%-30s %s'%(i[0], results[0]))
但是,您可以将SELECT
语句组合到一个查询中:
def viewresults(self, sethw):
conn = sqlite3.connect('MyComputerScience.db')
c = conn.cursor()
sql = """
SELECT SName||' '||FName, Results
FROM HomeworkSet, HomeworkInfo, users
WHERE HomeworkInfo.HomeworkName = ?
AND HomeworkInfo.HWID = HomeworkSet.HWID
AND HomeworkSet.StudentID = users.username
"""
c.execute(sql, (self.Homework_To_Set.get(),))
for result in c:
self.View_Results.insert(END, '%-30s %s'%result)
“当前输出:……您可以使用SQL JOIN组合三个SELECT语句,因此可以使用一个for循环遍历结果。
def viewresults(self, sethw):
conn = sqlite3.connect('MyComputerScience.db')
c = conn.cursor()
sql = """
SELECT SName||' '||FName, Results
FROM HomeworkSet, HomeworkInfo, users
WHERE HomeworkInfo.HomeworkName = ?
AND HomeworkInfo.HWID = HomeworkSet.HWID
AND HomeworkSet.StudentID = users.username
"""
c.execute(sql, (self.Homework_To_Set.get(),))
for result in c:
self.View_Results.insert(END, '%-30s %s'%result)