我在 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))
提前谢谢大家。
答案 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)
希望这会有所帮助。
如果有其他方法可以解决问题,请随时发表评论。