【问题标题】:Should I use flask sqlalchemy many-to-many relationship?我应该使用flask sqlalchemy 多对多关系吗?
【发布时间】:2015-05-27 04:42:39
【问题描述】:

我正在尝试设计我的数据库,但它没有按照我想要的方式运行。

好吧,我不认为这里有表降价,我只会有我的数据库表和下面的列:

Student: id, fname, lname

Course: id, code, section, name, room, period

假设所有行在StudentCourse 表中都是唯一的。 如何设计我的数据库,以便当我查询一个学生时,它会返回我学生所修读的所有课程,反之亦然,当我查询一门课程时,它将返回我该课程中的所有学生。

我正在使用 Flask 和 SQLAlchemy,但不知道在这种情况下是否应该使用多对多?

【问题讨论】:

  • 是的。 Student 可以有很多课程,Course 可以有很多学生,所以我会说这是Many-to-Many 关系的一个很好的候选人。您只需要一个包含user_idcourse_id 列的联结表。
  • 哈,我们说的几乎一模一样。抱歉,我没有看到你的评论!

标签: python database flask sqlalchemy flask-sqlalchemy


【解决方案1】:

是的。你有很多学生和很多课程,课程可以有很多学生,一个学生可能有很多课程。

要进行多对多,您需要一个联结表或关联表,其列如下所示:

id | course_id | student_id
---------------------------
1  |         1 |          1
2  |         1 |          2
3  |         2 |          1
4  |         2 |          3

然后,在您的模型中,您可以使用 SQLalchemy 的关系函数来使用它:

class Classes(Base):
    students = relationship("Students", secondary=junction_table)

class Students(Base):
    classes = relationship("Classes", secondary=junction_table)

junction_table = Table('enrollment', Base.metadata,
   Column('class_id', Integer, ForeignKey('classes.id')),
   Column('student_id', Integer, ForeignKey('students.id')),
)

要正确设置多对多是很棘手的,但希望这足以让您开始。

相关文档:

http://docs.sqlalchemy.org/en/rel_0_9/orm/basic_relationships.html#many-to-many

【讨论】:

  • 我将我的班级命名为 Student 并尝试使用 ForeignKey('students.id'),但最终出现错误。后来我注意到ForeignKey 需要与类名同名。我应该使用__tablename__ 属性来覆盖 Flask-SQLAlchemy 使用的默认命名约定吗?
猜你喜欢
  • 2016-06-15
  • 2021-08-31
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多