Python 3.4.2:如何在sqlite数据库中检查数据匹配的列

Python 3.4.2:如何在sqlite数据库中检查数据匹配的列,python,sqlite,Python,Sqlite,我正在创建一个专为学生设计的程序。它要求学生说出他们的名字,他们的班级,然后是一系列10个随机问题。我已经完成了第一部分的工作,现在我希望将学生的姓名、班级和分数添加到一个单独的数据库中,具体取决于他们是在班级1、2还是3中,并为sqlite数据库中的每个班级添加一个单独的表 我希望在数据库中记录每个学生的三个分数,但我不知道如何检查分数1列中是否有分数,如果有,那么当学生第二次运行测验时,他们的第二个分数应该记录在分数2列中 import random, sqlite3, os def in

我正在创建一个专为学生设计的程序。它要求学生说出他们的名字,他们的班级,然后是一系列10个随机问题。我已经完成了第一部分的工作,现在我希望将学生的姓名、班级和分数添加到一个单独的数据库中,具体取决于他们是在班级1、2还是3中,并为sqlite数据库中的每个班级添加一个单独的表

我希望在数据库中记录每个学生的三个分数,但我不知道如何检查分数1列中是否有分数,如果有,那么当学生第二次运行测验时,他们的第二个分数应该记录在分数2列中

import random, sqlite3, os

def inputName():
userName = str(input("Please enter your full name: "))
if userName == "":
    print("An error occured! Please enter your full name!", "\n")
    inputName()
elif userName.isdigit():
    print("An error occured! Please only include letters in your name!")
    userName = None
    inputName()
else:
    return userName

def randomQuiz():

operator = ['+', '-', '*']
score = int(0)
question = int(1)
while question < int(11):
    print("Question",question,";")
    num1 = random.randint(0,15)
    num2 = random.randint(0,15)
    operation = random.choice(operator)
    guess = input("What is " + str(num1) + " " + operation + " " + str(num2)     +"? ")
    try:
        guess = int(guess)
    except ValueError:
        print("Nothing acceptable entered!")

    answer = eval(str(num1) + operation + str(num2))
    if guess == answer:
        print("Correct!" + "\n")
        score = score + int(1)
        question = question + int(1)
    else:
        print("Incorrect! The right answer was", answer, "\n")
        question = question + int(1)
print("Your score is", score, "out of 10")
return score

def inputClass():

userClass = input("Please specify if you are in class 1, class 2, or class 3: ")
try:
    userClass = int(userClass)
except ValueError:
    print("An error occured, please enter the corresponding number if you are  in class 1, class 2, or class 3!","\n")
    inputClass()

if userClass == 1:
    userClass = str("Class 1")
elif userClass == 2:
    userClass = str("Class 2")
elif userClass == 3:
    userClass = str("Class 3")
else:
    print("An error occured, please enter the corresponding number if you are in class 1, class 2, or class 3!","\n")
    userClass = None
    inputClass()

return userClass

def createDatabase():

if os.path.exists("ArithmeticQuizScores.db") == False: #checks if file doesn't exists
    makeFile = open("ArithmeticQuizScores.db", "w") #if not, then it will create one
    makeFile.close()
else:
    return True

def createTable():

makeTableInDatabase = sqlite3.connect("ArithmeticQuizScores.db")
editDatabase = makeTableInDatabase.cursor()
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class1StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""")
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class2StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""") 
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class3StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""")
makeTableInDatabase.commit()
editDatabase.close()

def addFirstData(studName, studClass, studScore):

value = [studName, studClass, studScore]
OpenDatabase = sqlite3.connect("ArithmeticQuizScores.db")
addToDatabase = OpenDatabase.cursor()

if studClass == str("Class 1"):
    addToDatabase.execute('''INSERT INTO Class1StudentsScores ("studentName", "studentClass", "studentScore1") VALUES (?, ?, ?)''', value)

elif studClass == str("Class 2"):
    addToDatabase.execute('''INSERT INTO Class2StudentsScores ("studentName", "studentClass", "studentScore2") VALUES (?, ?, ?)''', value)

else:
    if studClass == str("Class 3"):
        addToDatabase.execute('''INSERT INTO Class3StudentsScores ("studentName", "studentClass", "studentScore1") VALUES (?, ?, ?)''', value)

OpenDatabase.commit()
addToDatabase.close()

def addSecondData(StudN, StudS):
value2 = [StudN, StudS]
OpenDB = sqlite3.connect("ArithmeticQuizScores.db")
addToDB = OpenDB.cursor()

if StudC == ("Class 1"):
    addToDB.execute('''INSERT INTO Class1StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)

elif studClass == ("Class 2"):
    addToDB.execute('''INSERT INTO Class2StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)
else:
    if studClass == ("Class 3"):
        addToDB.execute('''INSERT INTO Class3StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)
OpenDB.commit()
addToDB.close()

def checkIfScore(SClass, SName, sScore):
GetConnection = sqlite3.connect("ArithmeticQuizScores.db")
GetCursor = GetConnection.cursor()

if SClass == str("Class 1"):
    GetCursor.execute("SELECT * FROM Class1StudentsScores ORDER BY studentName ASC")
    CheckName = GetCursor.fetchall()
    for row in CheckName:
        if row[0] == SName:
            if row[2] is not None:
                return addSecondData(SName, SClass, sScore)
            else:
                return addFirstData(SName, SClass, sScore)
        else:
            return addFirstData(SName, SClass, sScore)

elif SClass == str("Class 2"):
    for row in CheckName:
        if row[0] == SName:
            if row[2] is not None:
                return addSecondData(SName, SClass, sScore)
            else:
                return addFirstData(SName, SClass, sScore)
        else:
            return addFirstData(SName, SClass, sScore)
else:
    if SClass == str("Class 3"):

        for row in CheckName:
            if row[0] == SName:
                if row[2] is not None:
                    return addSecondData(SName, SClass, sScore)
                else:
                    return addFirstData(SName, SClass, sScore)
            else:
                return addFirstData(SName, SClass, sScore)

def Quiz():

name = inputName()
Class = inputClass()
score = randomQuiz()
makeDB = createDatabase()
makeT = createTable()
addData = checkIfScore(name, Class, score)

Quiz()

从关系数据库的角度来看,您应该将分数存储在单独的行中。然后用一个自动递增的id查询最近的3个表,这意味着按id排序、降序,并将结果限制在前3位。根据Martijn的建议,您的多个表应该替换为一个表和一个额外的字段,指示所涉及的类。您不应该为多个测试事件添加多个字段,而应该添加一个带有测试序列号或日期时间的字段。我明白您的观点,但我该如何创建它?我14岁,是python新手,那么我该如何修改我的代码呢?