我对
flask-sqlalchemy
很陌生,尤其是在关系模型方面。多对多关系模型的概念是什么?我的示例用例是单个用户可以有多个组,组可以有多个用户。正确的关系是“多对多”吗?如果不是,那么在此用例中什么类型的关系才有意义?
我已经四处搜索,但我不完全理解这个概念和实现。预先感谢:-)
是的,在您的场景中这被认为是多对多关系。例如,考虑一个具有用户和组的数据库。可以说,一个用户有多个组,一个组有多个用户。这就像双方重叠的一对多关系。这实际上在关系数据库中表示并不简单,并且不能通过简单地将外键添加到现有表来完成。为了适应这种情况,您需要一个额外的表作为中间/辅助表,其中存储两个表的主键。
这是使用 Flask-Sqlalchemy 的实现:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////tmp/test.db"
db = SQLAlchemy(app)
# act as auxiliary table for user and group table
user_groups = db.Table(
"user_groups",
db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
db.Column("group_id", db.Integer, db.ForeignKey("group.id")),
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
groups = db.relationship("Group", secondary=user_groups, back_populates="users")
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), nullable=False)
users = db.relationship("User", secondary=user_groups, back_populates="groups")
更多参考: https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html 如何使用 SQLAlchemy 构建多对多关系:一个很好的例子