使用Python中的SQLAlchemy建模三表之间的多对多关系

3 投票
1 回答
1935 浏览
提问于 2025-04-16 20:49

我们来看看在Python中使用sqlalchemy的表模型。

class Worker(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Project(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Rating(Base):
    id Column(Integer, primary = True)
    description Column(String, nullable = False)

接下来,我们考虑一下这些表的一些限制条件。(请不要质疑这个例子的合理性,这只是我能想到的最好的方式来描述我想学习的内容。:-))

  1. 一个 worker(工人)可以有多个 projects(项目)来做。
  2. 一个 project(项目)可以有多个 workers(工人)来负责。
  3. 对于每一对 (worker, project),都有一个独特的 rating(评分)。

我明白,这里有三个多对多的关系。它们是:

  1. 工人和项目之间的关系
  2. 工人和评分之间的关系
  3. 评分和项目之间的关系

我在定义两个表之间的多对多关系时没有问题。我只需要添加一个关联表和一个关系到我的模型中。

worker_project = Table('worker_project', METADATA,
                       Column('worker_id', Integer, ForeignKey('workers.id')),
                       Column('project_id', Integer, ForeignKey('projects.id')),

class Worker(Base):
    # [...]
    papers = relationship('Project',
                          secondary=worker_project,
                          backref='workers')

我遇到的问题是,如何像上面描述的那样连接“评分”表。任何帮助都非常感谢。

1 个回答

4

把评分表做成像这样。

  Rating
---------------------
  rating_id (primary key) 
  worker_id (foreign key - worker(worker_id)) 
  project_id (foreign key - project(project_id)) 
  description

如果我理解得没错的话。

撰写回答