自动合并来自两个表的信息
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
我有两个 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