Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将不同表中的多条记录合并为一个字符串_Python_Sqlite_Tkinter - Fatal编程技术网

Python 将不同表中的多条记录合并为一个字符串

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

我试图使用studentID从一个表中获取他们的名字和姓氏,然后使用HomeworkID获取他们其中一个作业的结果,并使用tkinter将结果显示在listbox小部件中。当然,在它被显示之前,我首先需要能够获得数据。 这就是我迄今为止所做的:

 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)