自动合并来自两个表的信息

Combine information from two tables automatically

我有两个 tables Materials 和 MaterialSubFamilies,它们的定义如下:

class MaterialSubFamilies(db.Model):
  sub_family = db.Column(db.String(64), index=True)
  materials = db.relationship('Materials', backref='msub_family', lazy='dynamic')

class Materials(db.Model):
  sub_family = db.Column(db.Integer, db.ForeignKey('material_sub_families.id'))

查询材料后 table 我使用 Marshmallow 使用此模式将其转换为字典:

class MaterialsSchema(ma.ModelSchema):
  class Meta:
    model = models.Materials

我得到的是这样的:

"materials": [
 {"id": 1,
  "name": "bla",
  "msub_family": 2, 
 }]

然而,当我获取材料字典时,我想要的不是子家族的 ID,而是直接命名(sub_family 字段中的字符串)。所以这是一种我希望在每次查询材料时自动拥有的连接 table。这样的事情可能吗? 谢谢

在每个现代 ORM 中都有一个叫做 Eager Loading 的概念。在此过程中,对一种类型实体的查询也会将相关实体加载为查询的一部分。

在 SQLAchemy 中提供了与 Joined Eager Loading 相同的概念,要使用它,您只需在 MaterialSubFamilies 模型中设置 lazy='joined' .

class MaterialSubFamilies(db.Model):
  sub_family = db.Column(db.String(64), index=True)
  materials = db.relationship('Materials', backref='msub_family', lazy='joined')

和..

class MaterialsSchema(ma.ModelSchema):
  class Meta:
    model = models.Materials
    msub_family = fields.Nested("MaterialSubFamiliesSchema")

有关此主题的更详细说明,请参阅以下文档: https://docs.sqlalchemy.org/en/13/orm/loading_relationships.html#joined-eager-loading

或观看 PrettyPrintted 的视频说明:
https://www.youtube.com/watch?v=g1oFlq7D_nQ&t=336s