2016-10-07 47 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"])