我应该使用flask sqlalchemy多对多关系吗?

时间:2015-03-24 00:41:41

标签: python database flask sqlalchemy flask-sqlalchemy

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

好吧,我不认为这里有表格标记,我将只有我的数据库表和列:

Student: id, fname, lname

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

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

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

1 个答案:

答案 0 :(得分:5)

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

要执行多对多,您需要一个包含类似以下内容的列的联结或关联表:

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