2016-10-07 13 views
0

studentIDとlessonDateが特定の結果と等しいデータベースからレコードを取得しようとしています。 StudentIDは正常に動作しているようですが、lessonDateはうまく動作しません。日付形式のため、私はすべての日付を文字列に変換してデータベースに入れました。フィールドがテキストフィールドになるようにデータベースファイルを設定しました。私はレッスンの名前とレーティングを得ようとしています。レッスンの名前とレーティングは、特定の日に行ったすべてのエクササイズで得られたものです。データベースダイアグラム:https://docs.google.com/drawings/d/16IqlDN2iqzVCeaUUGgeCe1R98yhUI7vQswH0tK39cAk/edit?usp=sharingSQLクエリは、 'where'条件で必要なデータを選択しません。

私はこの関数の他の部分でも使用しているように、StudentIDが正しいことを確信しています。私は日付が正しいことを確信しています。第4行目で使用されている「日付」変数が正しい出力をファイルに書き込むため、元々この変数として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つの提案:Pythonが実行している実際のクエリを出力し、そのクエリを直接SQLite上で実行できるかどうかを確認してください。 –

答えて

2

パラメータが正しく引用されていません。

このため、文字列補間を使用してクエリにデータを追加しないでください。

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"]) 
関連する問題