sqlalchemy 一对多和多对多的创建语法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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` 类关联起来,可以实现多对多关系。每个左对象可以与多个右对象相关联,每个右对象也可以与多个左对象相关联。