【发布时间】:2018-02-11 23:01:35
【问题描述】:
我在 SQLAlchemy 中创建了多对多关系,使用如下:
b_c = Table('b_c',
Column('b_id', UUIDType(binary=False), ForeignKey('b.id'), primary_key=True),
Column('c_id', UUIDType(binary=False), ForeignKey('c.id'), primary_key=True)
)
其中c 和b 是只有id 列(UUIDType(binary=false)) 的表以及与此类似的模型:
class A(object):
__tablename__ = 'a'
id = Column('id', UUIDType(binary=False), default=uuid.uuid4, primary_key=True)
class B(object):
__tablename__ = 'b'
id = Column('id', UUIDType(binary=False), default=uuid.uuid4, primary_key=True)
a_id = Column(UUIDType(binary=False), ForeignKey('a.id'), nullable=False)
a = relationship('A')
class C(object):
__tablename__ = 'c'
id = Column('id', UUIDType(binary=False), default=uuid.uuid4, primary_key=True)
a_id = Column(UUIDType(binary=False), ForeignKey('a.id'), nullable=False)
a = relationship('A')
这种关系工作得非常好,我可以将 B 和 C 对象过滤到父 A 以用于我的使用场景。但是,为了确保使用这些模型的逻辑之外的数据完整性,是否有任何最佳实践要求任何关系 b_c、b.a 必须等于 c.a?
抱歉,如果这个问题得到了回答,但我发现的任何示例都是针对表本身值的简单 CHECK 约束,并且不需要连接表的值。
【问题讨论】:
-
为什么
A&C子类object而不是Model? -
感谢您指出这一点,在尝试删除一些不必要的细节时错过了这一点 - 更新了问题
标签: python python-3.x postgresql sqlalchemy