使用Python中的SQLAlchemy建模三表之间的多对多关系
我们来看看在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)
接下来,我们考虑一下这些表的一些限制条件。(请不要质疑这个例子的合理性,这只是我能想到的最好的方式来描述我想学习的内容。:-))
- 一个
worker
(工人)可以有多个projects
(项目)来做。 - 一个
project
(项目)可以有多个workers
(工人)来负责。 - 对于每一对
(worker, project)
,都有一个独特的rating
(评分)。
我明白,这里有三个多对多的关系。它们是:
- 工人和项目之间的关系
- 工人和评分之间的关系
- 评分和项目之间的关系
我在定义两个表之间的多对多关系时没有问题。我只需要添加一个关联表和一个关系到我的模型中。
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
如果我理解得没错的话。