我有一个PartyOrganiser
(s)的表,一个Contact
(s)的表和一个组织的Party
(s)的表。在
PartyOrganiser
到Party
是一对多。PartyOrganiser
到{Party
toContact
是多对多,带有一个关联表。
class PartyOrganiser(db.Model):
__tablename__ = 'party_organiser'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
parties = db.relationship("Party", back_populates='party_organiser')
contacts = db.relationship("Contacts", back_populates='party_organiser')
contact_party_ass_tab = db.Table('contact_party', db.Model.metadata,
db.Column('party_id', db.Integer, db.ForeignKey('party.id')),
db.Column('contact_id', db.Integer, db.ForeignKey('contact.id')))
class Party(db.Model):
__tablename__ = 'party'
id = db.Column(db.Integer, primary_key=True)
details = db.Column(db.String)
party_organiser_id = db.Column(db.Integer, db.ForeignKey('party_organiser.id'), nullable=False)
party_organiser = db.relationship("PartyOrganiser", back_populates="parties", uselist=False)
attendees = db.relationship("Contact", secondary=contact_party_ass_tab, back_populates='intended_parties')
class Contact(db.Model):
__tablename__ = 'contact'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
party_organiser_id = db.Column(db.Integer, db.ForeignKey('party_organiser.id'), nullable=False)
party_organiser = db.relationship("PartyOrganiser", back_populates="parties", uselist=False)
intended_parties = db.relationship("Contact", secondary=contact_party_ass_tab, back_populates='attendees')
从语法上讲,对于一个特定的聚会,我想获取一个与该党组织者相关但尚未参加该聚会的联系人的列表。一、 e.称他们为潜在的与会者,我希望以下是SQLalchemy查询风格的解决方案:
^{pr2}$此配置在PartyOrganiser
、Party
和Contact
之间有一个固有的3向约束:只有当聚会和与会者共享一个聚会组织者时,才能将其关联起来。一、 e.PartyOrganiser1的联系人不能是PartyOrganiser2组织的Party2的参与者。在我看来,这是不明显的,在上述格式的要求。事实上我不相信。我该如何实现这个约束呢?在
您可以使用联接表上的
NOT EXISTS
构造查询关系中排除的项。在至于您的另一个问题,您可以通过为添加属性级验证器将该约束施加到ORM级别聚会。与会者以及联系意向方并确保所有添加到这些列表中的新项目都有一个匹配的party_Organizer_id。这是完整的代码
^{pr2}$输出(检查上面代码最后一行抛出的异常):
相关问题 更多 >
编程相关推荐