如何对关联表

时间:2018-05-27 12:27:45

标签: mysql python-3.x flask sqlalchemy flask-sqlalchemy

我在 MANY TO MANY 关系中有两个模型,我想在一个查询中获取相关模型中的所有列值。但是无法使用Flask SQLAlchemy。

但是我能够使用phpmyadmin中的SQL查询获取所需的数据。

这是查询

  

SELECT ply_positions.plyPositionId,ply_positions.plyPositionName,   ply_positions.createdAt,ply_positions.updatedAt,   product_categories.productCatName FROM ply_positions JOIN   product_category_ply_position AS product_category_ply_position_1 ON   ply_positions.plyPositionId =   product_category_ply_position_1.plyPositionId加入product_categories   ON product_categories.productCatId =   product_category_ply_position_1.productCatId

以下是Gist上模型资源的代码: - https://gist.github.com/himadriganguly/c0c9d7e247c286e497998dbd33ce7e84

输出:

  

[       {           " product_category":[               1           ]           " plyPositionId":2,           " updatedAt":null,           " product_category_associations":[               {                   " productCatId":1,                   " plyPositionId":2               }           ]           " createdAt":1234,           " plyPositionName":"长笛"       },       {           " product_category":[               1           ]           " plyPositionId":1,           " updatedAt":null,           " product_category_associations":[               {                   " productCatId":1,                   " plyPositionId":1               }           ]           " createdAt":123,           " plyPositionName":" Top"       }]

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

同时在创建关系时我们使用懒惰两次,但为什么我们这样做并不清楚。

  

ply_position = db.relationship(' PlyPositionModel',           secondary =" product_category_ply_position",lazy = True,           backref = db.backref(' product_category',lazy = True))

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

我想我已经弄清楚它不是SqlAlchemy的问题,而是关于你如何序列化数据。在这种情况下,我正在使用烧瓶棉花糖。

所以在plyPositionResource.py中我必须稍微改变一下架构

<强> ProductCategorySchema

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

<强> PlyPositionSchema

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)

希望这会有所帮助。

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