sqlalchemy 一对多和多对多的创建语法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在SQLAlchemy 中,创建一对多(one-to-many)和多对多(many-to-many)关系需要使用不同的语法。

1. 一对多关系:

```python

from sqlalchemy import Column, Integer, String, ForeignKey

from sqlalchemy.orm import relationship

class Parent(Base):

__tablename__ = 'parent'

id = Column(Integer, primary_key=True)

name = Column(String)

children = relationship('Child', back_populates='parent')

class Child(Base):

__tablename__ = 'child'

id = Column(Integer, primary_key=True)

name = Column(String)

parent_id = Column(Integer, ForeignKey('parent.id')) ```

在上述示例中,`Parent` 类有一个`children` 属性,它表示与该父对象相关联的子对象列表。`Child` 类有一个`parent_id` 列,它表示父对象的`id`。通过这种设置,一个父对象可以与多个子对象相关联,而每个子对象只能与一个父对象相关联。

2. 多对多关系:

```python

from sqlalchemy import Column, Integer, String, Table, ForeignKey from sqlalchemy.orm import relationship, secondary

association_table = Table(

'association', Base.metadata,

Column('left_id', Integer, ForeignKey('left.id')),

Column('right_id', Integer, ForeignKey('right.id'))

)

class Left(Base):

__tablename__ = 'left'

id = Column(Integer, primary_key=True)

name = Column(String)

related = relationship('Right', secondary=association_table)

class Right(Base):

__tablename__ = 'right'

id = Column(Integer, primary_key=True)

name = Column(String)

```

在上述示例中,`Left` 类有一个`related` 属性,它表示与该左对象相关联的右对象列表。`association_table` 是一个辅助表,用于存储左对象和右对象之间的关联关系。通过将`association_table` 定义为辅助表,并使用`secondary` 参数将其与`Left` 和`Right` 类关联起来,可以实现多对多关系。每个左对象可以与多个右对象相关联,每个右对象也可以与多个左对象相关联。

相关文档
最新文档