我在“多对多关系”中有两个模型,我想在一个查询中获取相关模型中的所有列值。但是使用Flask SQLAlchemy无法做到这一点。

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

这是查询


  选择ply_positions.plyPositionId,ply_positions.plyPositionName,
  ply_positions.createdAt,ply_positions.updatedAt,
  product_categories.productCatName来自ply_positions加入
  product_category_ply_position AS product_category_ply_position_1 ON
  ply_positions.plyPositionId =
  product_category_ply_position_1.plyPositionId JOIN product_categories
  在product_categories.productCatId =
  product_category_ply_position_1.productCatId


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

输出:


  [
      {
          “产品分类”: [
              1个
          ],
          “ plyPositionId”:2
          “ updatedAt”:null,
          “ product_category_associations”:[
              {
                  “ productCatId”:1
                  “ plyPositionId”:2
              }
          ],
          “ createdAt”:1234,
          “ plyPositionName”:“长笛”
      },
      {
          “产品分类”: [
              1个
          ],
          “ plyPositionId”:1
          “ updatedAt”:null,
          “ product_category_associations”:[
              {
                  “ productCatId”:1
                  “ plyPositionId”:1
              }
          ],
          “ createdAt”:123,
          “ plyPositionName”:“顶部”
      }]


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

同样,在建立关系时,我们使用了两次懒惰,但是我为什么不这样做。


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


谢谢大家。

最佳答案

我想我已经弄清楚这不是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)


希望这对其他人有帮助。

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

08-16 18:23