代码之家  ›  专栏  ›  技术社区  ›  Himadri Ganguly

如何进行关联表的flask sqlachemy查询

  •  0
  • Himadri Ganguly  · 技术社区  · 7 年前

    我有两个模特 多对多 Relationship和我希望在一个查询中获取相关模型中的所有列值。但不能用flask sqlAlchemy得到它。

    但我可以使用phpmyadmin中的SQL查询获得所需的数据。

    这是询问

    选择ply_positions.plypositionid、ply_positions.plypositionname, ply_positions.createdat,ply_positions.updatedat, product_categories.productcatname来自ply_positions join 产品类别作为产品类别的位置 铺层位置.plypositionid= 产品类别 关于product_categories.productcatid= 产品类别

    这是代码 模型 资源 根据要点: https://gist.github.com/himadriganguly/c0c9d7e247c286e497998dbd33ce7e84

    输出:

    [ { “产品类别”:。[ 一 , “PlypositionID”:2, “updatedat”:空, “产品\类别\关联”:。[ { “ProductCatid”:1, “PlypositionID”:2 } , “创建日期”:1234, “pluypositionname”:“长笛” } { “产品类别”:。[ 一 , “PlypositionID”:1, “updatedat”:空, “产品\类别\关联”:。[ { “ProductCatid”:1, “PlypositionID”:1 } , “创建日期”:123, “plypositionname”:“顶部” }

    获取关联表的输出,但不从product_categories表中获取的列值。

    同样,在建立一种关系的时候,我们使用了两次懒惰,但我不清楚我们为什么要这样做。

    ply_position=db.relationship('plypositionmodel', secondary=“产品类别”层位置“,lazy=true, backref=db.backref('产品类别',lazy=true))

    提前谢谢大家。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Himadri Ganguly    7 年前

    我想我已经发现这不是sqlacalchemy的问题,而是关于如何序列化数据的问题。在这种情况下,我用的是烧瓶棉花糖。

    所以在plypositionresource.py中,我必须稍微更改模式。

    产品类别示意图

    class ProductCategorySchema(ma.ModelSchema):
        class Meta:
            model = ProductCategoryModel
    

    多位置示意图

    class PlyPositionSchema(ma.ModelSchema):
        productcategories = fields.List(fields.Nested(ProductCategorySchema))
        class Meta:
            model = PlyPositionModel
    

    然后在get函数中,您可以执行以下操作

    def get(self):
            plyPositionResource = PlyPositionModel.query.order_by(\
                PlyPositionModel.plyPositionId.desc())\
                .all()
    
            plyPositions = plypositions_schema.dump(plyPositionResource).data
    
            return({"data": plyPositions}, 200)
    

    希望这能帮助别人。

    如果有其他解决问题的方法,请随时发表评论。