我在“多对多关系”中有两个模型,我想在一个查询中获取相关模型中的所有列值。但是使用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)
希望这对其他人有帮助。
如果还有其他方法可以解决问题,请随时发表评论。