Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 SQL查询没有选择我需要的带有“where”条件的数据_Python_Sqlite - Fatal编程技术网

Python SQL查询没有选择我需要的带有“where”条件的数据

Python SQL查询没有选择我需要的带有“where”条件的数据,python,sqlite,Python,Sqlite,我试图从我的数据库中获取记录,其中studentID和lessonDate与特定结果相等。这个学生看起来很好,但lessonDate却不行。由于日期格式的原因,我将所有日期转换为字符串以放入数据库。我已经设置了数据库文件,所以字段是文本字段。我试图得到一个学生在某个特定日期进行的所有练习的课程名称和评分。数据库关系图: 我确信StudentID是正确的,因为我在这个函数的其他部分使用它。我确信日期是正确的,因为第4行中使用的“date”变量会导致写入文件的正确输出,并且我最初在SQL查询中将日期

我试图从我的数据库中获取记录,其中studentID和lessonDate与特定结果相等。这个学生看起来很好,但lessonDate却不行。由于日期格式的原因,我将所有日期转换为字符串以放入数据库。我已经设置了数据库文件,所以字段是文本字段。我试图得到一个学生在某个特定日期进行的所有练习的课程名称和评分。数据库关系图:

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

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”是一个空列表。在这之后。
我仔细检查了我的数据。我的数据绝对正确。

您的参数引用不正确

这就是为什么不应该使用字符串插值将数据添加到查询中。您应该使用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"])

没有正确引用您的参数

这就是为什么不应该使用字符串插值将数据添加到查询中。您应该使用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"])

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