在 SQLAlchemy 中,我想在表 A 中写一组记录。然后在表 BI 中写一个引用 A 中(先验)未知数量的记录的记录。
在 python 术语中,我将创建类 A 和 B,然后在 B 中有一个包含 A 类型对象的列表。
可以这样做吗?
在 SQLAlchemy 中,我想在表 A 中写一组记录。然后在表 BI 中写一个引用 A 中(先验)未知数量的记录的记录。
在 python 术语中,我将创建类 A 和 B,然后在 B 中有一个包含 A 类型对象的列表。
可以这样做吗?
这不是一个真正的 SQLAlchemy 问题,而是一个基本的关系表问题。
您要么谈论一对多关系,要么谈论多对多关系,这两种关系 SQLAlchemy 都支持开箱即用。
一对多关系是一种基本的遏制关系;一个部门有很多员工,但每个员工只有一个部门。在这种情况下,只有一个传出关系的类获得外键,因此员工指的是部门,而不是相反。
SQLAlchemy 文档中的示例如下所示:
class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) children = relationship("Child") class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id'))
因此,如果您的A
类只能是一B
组的一部分,请使用此模式。
多对多关系是双方可以引用另一方的多个实例的关系。考虑员工和项目;一个员工可以是多个项目的一部分,一个项目可以涉及多个员工。
在 SQL 中,这种关系需要一个关联表,一个额外的数据库表,用于保存两个链接类型之间的映射。关于多对多关系的SQLAlchemy 文档清楚地记录了如何做到这一点;这是示例:
association_table = Table('association', Base.metadata, Column('left_id', Integer, ForeignKey('left.id')), Column('right_id', Integer, ForeignKey('right.id')) ) class Parent(Base): __tablename__ = 'left' id = Column(Integer, primary_key=True) children = relationship("Child", secondary=association_table) class Child(Base): __tablename__ = 'right' id = Column(Integer, primary_key=True)
如果每个A
对象可以是多个B
集合的一部分,请使用此模式。