我正在尝试从我的数据库中获取记录,其中studentID和lessonDate等于特定结果。 StudentID似乎工作正常,但lessonDate没有。由于日期格式,我已将所有日期转换为要放入数据库的字符串。我已经设置了数据库文件,因此该字段是文本字段。我正在尝试获得学生在特定日期进行的所有练习所获得的课程名称和评分。数据库图表:https://docs.google.com/drawings/d/16IqlDN2iqzVCeaUUGgeCe1R98yhUI7vQswH0tK39cAk/edit?usp=sharing
我确信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'是一个空列表。在这之后。 我有双重和三重检查我的数据。我的数据绝对正确。
答案 0 :(得分: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"])