Python sqlite3值查找

时间:2016-04-10 04:51:08

标签: python sqlite lookup

我有一个问题,我为自己创造了一个挑战,我需要你的帮助。

我有两张桌子。 [学生] - 其栏目包括姓名,课程,分数 [gradingscheme] - 其列包括字母,上部,下部

[gradingscheme]表基本上用作查找表,这样如果我的[学生]得分在[gradingscheme]的上下边界之间,它就会占用字母列的文本值。 (我知道你可以简单地做一个案例,然后分配一个字母等级,但我试图扩大我的知识基础)

import sqlite3
conn = sqlite3.connect('example3.db')
c = conn.cursor()

c.execute('''                                   
UPDATE students                                     
SET LetterGrade = CASE
    WHEN score between 90 and 100 then 'A'
    WHEN score between 80 and 90 then 'B'
    ELSE 'C'
END
''')                                        

c.execute('''
SELECT s.name,s.courseid,c.name,c.classroom,s.score,s.LetterGrade
FROM students AS s
LEFT OUTER JOIN courses AS c
WHERE s.courseid=c.courseid
''')                                        

import pprint
pp=pprint.PrettyPrinter()
pp.pprint(c.fetchall())          

conn.commit()
conn.close()

这是我到目前为止所做的,它是我试图在这次挑战中取代的UPDATE / SET部分。我不知道如何执行此操作。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

  1. 您的评分方案含糊不清。例如。 SELECT 90 BETWEEN 90 AND 100;就像SELECT 90 BETWEEN 80 AND 90;一样评估为真。您应该更喜欢使用范围,如90-100,80 - 89,70 - 79,......
  2. 您真的需要将评分信添加到学生表吗?通常,只要执行这样的选择,就可以简单地加入来自gradingscheme表的字母。例如。 SELECT s.name, s.course, g.letter FROM students s, gradingscheme g WHERE s.score BETWEEN g.lower AND g.upper;。您甚至可以创建一个视图来自动完成此操作。这样可以避免数据冗余。
  3. 如果您真的想要明确地将字母评分添加到学生表中,您可以尝试UPDATE students SET letterGrade = (SELECT letter FROM gradingscheme WHERE score BETWEEN lower AND upper);之类的内容。