Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlite 3多外键_Python_Sqlite_Foreign Keys - Fatal编程技术网

Python Sqlite 3多外键

Python Sqlite 3多外键,python,sqlite,foreign-keys,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"

我在做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:外键定义中的未知列“TeacherID”

正如您可能注意到另一个文件中的外键一样,PupilTable在其中。在一个有效的时刻,如果我将TeacherID作为外键删除,那么它就可以正常工作

谢谢
Devilb77

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

        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)