flask_sqlalchemy 多对多 关系 对中间表的操作
时间: 2023-06-26 12:04:04 浏览: 51
在 Flask 中使用 SQLAlchemy 进行多对多关系的操作,需要借助中间表来实现多对多关系的维护。这里提供一种常见的中间表模型:
```python
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
roles = db.relationship('Role', secondary='user_role', backref=db.backref('users', lazy='dynamic'))
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
user_role = db.Table('user_role',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('role_id', db.Integer, db.ForeignKey('roles.id'))
)
```
在这个模型中,中间表名为 `user_role`,其中包含了两个外键分别指向 `users` 和 `roles` 表,这两个表与中间表是多对多关系。
下面是一些对中间表的操作示例:
1. 添加关联关系
```python
user = User.query.get(user_id)
role = Role.query.get(role_id)
user.roles.append(role)
db.session.commit()
```
2. 删除关联关系
```python
user = User.query.get(user_id)
role = Role.query.get(role_id)
user.roles.remove(role)
db.session.commit()
```
3. 查询关联关系
```python
user = User.query.get(user_id)
roles = user.roles.all()
```
其中,通过 `user.roles` 可以获取到该用户的角色列表,通过 `all()` 方法可以获取到该列表中的所有角色对象。