Sqlite 3多个外键

时间:2015-04-13 17:40:01

标签: python sqlite foreign-keys

我正在学习A2课程,而且我遇到了多个外键的问题。以下是我认为相关的所有代码,如果您需要更多,请回复说明。

在TeacherInfo中:

def TMenu():
print()
MenuPupil = menuClass.Menu("Teacher")
MenuPupil.printMenu()
Choice = int(input("Enter your choice: "))
if Choice == 1:
    db_name = "PupilPremiumTableNew.db"
    sql= """Create table TeacherInfo
        (TeacherID int,
        TeacherInitials text,
        TeacherYearTeaching int,
        primary key(TeacherID))"""
    CreateTeachersTable(db_name, "TeacherInfo",sql)

在PupilPremiumTableNew中:

db_name = "PupilPremiumTableNew.db"
    sql= """Create table PupilPremiumTableNew
           (PupilID int,
            WritingGrade text,
            ReadingGrade text,
            MathsGrade text,
            Term text,
            RecordID int,
            InterventionsReading text,
            InterventionsWriting text,
            InterventionsMaths text,
            primary key(RecordID),
            foreign key(PupilID)
            references PupilInfo(PupilID)

            foreign key(TeacherID)
            references TeacherInfo (TeacherID)
            on update cascade on delete cascade)"""
    CreatePupilPremiumTable(db_name, "PupilPremiumTableNew",sql)


def CreateTeachersTable(db_name,table_name,sql):
with sqlite3.connect(db_name) as db:
    cursor = db.cursor()
    cursor.execute("select name from sqlite_master where name =?",(table_name,))
    result = cursor.fetchall()
    keep_table = True
    if len(result) == 1:
        response = input("The table {0} already exists, do you wish to recreate it?(y/n): ".format(table_name))
        if response == 'y':
            keep_table = False
            print("The table {0} has been recreated, all existing data has been deleted. ".format(table_name))
            cursor.execute("drop table if exists {0}".format(table_name))
            db.commit()
        else:
            print("Existing table was kept. ")
    else:
        keep_table = False
    if not keep_table:
        cursor.execute(sql)
        db.commit()

我得到的错误是:sqlite3.OperationalError: unknown column "TeacherID" in foreign key definition

您可能会注意到另一个文件中的外键,PupilTable就在那里。在一个工作的那一刻,如果我将TeacherID作为外键删除它全部工作

由于 Devilb77

1 个答案:

答案 0 :(得分:0)

我忘了告诉它是什么TeacherID,所以为了解决这个问题,我将TeacherID int添加到变量sql中 现在看来是这样的:

        db_name = "PupilPremiumTableNew.db"
    sql= """Create table PupilPremiumTableNew
           (PupilID int,
            WritingGrade text,
            ReadingGrade text,
            MathsGrade text,
            Term text,
            RecordID int,
            InterventionsReading text,
            InterventionsWriting text,
            InterventionsMaths text,
            TeacherID int,
            primary key(RecordID),
            foreign key(PupilID)
            references PupilInfo(PupilID)

            foreign key(TeacherID)
            references TeacherInfo (TeacherID)
            on update cascade on delete cascade)"""
    CreatePupilPremiumTable(db_name, "PupilPremiumTableNew",sql)