让我们考虑在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.一个“工人”可能有多个“项目”要处理。 2.一个“项目”可能有多个被分配到其上的“工人”。 3.对于每个元组(工人、项目),您都有一个不同的“评分”。
我理解,我有三个多对多关系。它们是:
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')
我失败的地方是无法像上面所描述的那样连接“评分”表。 感谢任何帮助。
worker.rating_id
将为我提供该工人的所有评级集合。project.rating_id
将为我提供参与特定项目的所有工人的评级集合。对吧?给定一个工人和一个项目,我总是需要计算worker.rating_id
和project.rating_id
的交集,以获取特定项目上给定作者的评级,对吧? - Aufwind