python-3.x - Flask sqlalchemy 和 marshmallow 的多对多关系

标签 python-3.x flask sqlalchemy flask-sqlalchemy flask-marshmallow

假设我有 2 个表,表 1 由用户信息组成,表 2 由分支信息组成。 表1和表2通过多对多关系彼此相关。 例如,1 个用户可以在多个分支工作,1 个分支可以有多个用户。 所以这里没有父子概念。我想知道是否必须创建另一个具有模式的表并使用外键将其与用户和分支表相关联,或者我应该创建一个关联表。

我已经做到了:

class UserBranchMap(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    branch_id = db.Column(db.Integer,db.ForeignKey('branch.id'))
    branch = db.relationship("Branch", backref=db.backref("UBMbranch", lazy="dynamic"))
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    user = db.relationship("User", backref=db.backref("UBMuser", lazy="dynamic"))
    created_at = db.Column(db.VARCHAR(20), nullable = False)
    created_by = db.Column(db.VARCHAR(20), nullable = False)

class UserBranchMapSchema(ma.Schema):
    branch = fields.Nested(branch_schema)
    user = fields.Nested(user_schema)
    class Meta:
        fields = ('branch_id','user_id','created_at','created_by')

userbranchmap_schema = UserBranchMapSchema()
userbranchmaps_schema = UserBranchMapSchema(many = True)

关联表和这个映射表有什么区别?

最佳答案

如果我理解正确的话,你是在问关联表之间的区别

UserBranches = db.Table(
    'user_branches',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('branch_id', db.Integer, db.ForeignKey('branch.id'), primary_key=True)
)

和映射表

class UserBranch(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user = db.relationship("User", backref=db.backref("UBMuser", lazy="dynamic"))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    branch = db.relationship("Branch", backref=db.backref("UBMbranch", lazy="dynamic"))
    branch_id = db.Column(db.Integer, db.ForeignKey('branch.id'))

在数据库级别上,它们之间没有真正的区别。如果您只想在两个表之间建立严格的多对多关系,则只需使用关联表即可。由于 SQLAlchemy,您无需对它执行任何操作,因为只要您将用户连接到分支,就会自动通过此表进行连接,反之亦然。

但是,如果您想做更多事情,例如让它实际上表示一种关系,那么像您这样编写的映射表就可以了,因为它的行为与普通表完全相同。这意味着您可以像 UserBranch.created_at 一样使用它,甚至可以根据需要直接查询它。

关于python-3.x - Flask sqlalchemy 和 marshmallow 的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203540/

相关文章:

python-3.x - 如何绘制多类数据的 ROC 曲线并从混淆矩阵测量 MAUC

python - sqlalchemy.exc.IntegrityError - mySql - 自动增量和数据库存储中的主键错误

python - SQLAlchemy:从连接多个表中获取单个对象

python - AWS Lambda Python 3.7 运行时异常记录

python - Python 中的广义 __eq__() 方法

python - 如何获取flask中html标签内变量的值?

python - 使用 WTForms model_form() 引发 UserForm has no attribute 'hidden_tag'

Python + Flask 应用程序在 Pycharm 在 127.0.0.1 上运行后从错误的文件夹运行

python - 为什么存在 Flask 扩展?

python - numpy boolean 数组内存溢出