当我在一个表上创建关系并从该表中获取两列时出现问题

时间:2019-07-04 11:23:18

标签: python flask sqlalchemy flask-sqlalchemy

我是不熟悉Flask和Web开发的人。我正在创建一些表格进行练习,这就是问题所在:

  • 我创建了两个表studentsubject
  • 现在,当我在它们之间添加关系并通过外键访问student.id很好时,但是当我尝试访问Student.result(整数)时,下面的错误是我的数据库模型代码。
  • li>
class Students(db.Model):
    __tablename__ = 'students'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    result = db.Column(db.Integer)
    admins = db.relationship("Subjects", lazy="dynamic")


class Subjects(db.Model):
    __tablename__ = 'subjects'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    student = db.relationship("Student", lazy="dynamic")
    student_id = db.Column(db.Integer, db.ForeignKey("students.id"))
    student_result = db.Column(db.Integer, db.ForeignKey("students.result"))

添加记录时出错:

foreign key mismatch - "subjects" referencing "students" (INSERT INTO `subjects`(`id`,`name`,`student_id`,`student_result`) VALUES (1,NULL,NULL,NULL);)

1 个答案:

答案 0 :(得分:0)

感谢您询问其他细节。我认为这里的问题是您的student_result关系实际上不是外键。

虽然您的外键不一定需要引用主键,但是 却必须引用unique column。主键保证是唯一的。在您的类结构中,您应该通过连接student外键上的表来获得result的{​​{1}}。您根本不应该拥有student_id关系。

student_result

顺便说一句,给您的班级名称一个复数真的很令人困惑。我建议对学生和科目的单数化。 (不过,将表名复数确实有意义。)