我使用类似以下方式在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
? - Haleemur Ali