2016-10-07 43 views
0

我想从我的数据库中获取记录,其中studentID和lessonDate等于特定结果。 StudentID似乎工作正常,但lessonDate没有。由于日期格式,我已将所有日期转换为字符串以放入数据库。我已经建立了数据库文件,以便该字段是文本字段。我想要获得学生在特定日期进行的所有练习的课程名称和评分。数据库图:https://docs.google.com/drawings/d/16IqlDN2iqzVCeaUUGgeCe1R98yhUI7vQswH0tK39cAk/edit?usp=sharingSQL查询不会选择我需要的数据'where'条件

我确定StudentID是正确的,因为我在这个函数的其他部分使用它。我确定日期是正确的,因为第4行中使用的'date'变量导致写入文件的输出正确,并且我最初将SQL查询中的日期作为此变量,但它不起作用。我试过在这个学生是外键的地方打印课程,日期是'8-10-2016'。我真的不知道为什么会发生这种情况。任何人的任何建议或假设将不胜感激。

template = ("{0:50}{1:50} \n") 
print(lessonDateSet) 
for date in list(lessonDateSet): 
    target.write("Lesson date: {} \n".format(date)) 
    target.write("\n") 
    target.write(template.format("Exercise name:","rating:")) 
    self.cur.execute("""SELECT b.roadExerciseName, a.rating 
         FROM lessonExercises a LEFT JOIN roadExerciseInfo b ON a.roadExerciseID=b.roadExerciseID 
         LEFT JOIN lessons c ON c.lessonID=a.lessonID WHERE c.StudentID = {0} AND c.lessonDate = {1}""".format(studentInfo[0][0],"8-10-2016")) 
    fetch = self.cur.fetchall() 
    print(fetch, "fetch") 

'fetch'是一个空列表。在这之后。 我有双重和tripple检查我的数据。我的数据绝对正确。

+0

两条建议:输出Python正在运行的实际查询,然后查看是否可以直接在SQLite上运行该查询。 –

回答

2

您的参数未正确引用。

这就是为什么你不应该使用字符串插值来将数据添加到你的查询。您应该使用db-api的参数替换:

self.cur.execute("""SELECT b.roadExerciseName, a.rating 
        FROM lessonExercises a LEFT JOIN roadExerciseInfo b ON a.roadExerciseID=b.roadExerciseID 
        LEFT JOIN lessons c ON c.lessonID=a.lessonID 
        WHERE c.StudentID = ? AND c.lessonDate = ?""", 
       [studentInfo[0][0], "8-10-2016"])