Как выполнить запрос FLASK SQLALCHEMY для таблицы связей - PullRequest
0 голосов
/ 27 мая 2018

У меня есть две модели в ОТ МНОГО МНОГИЕ Отношения, и я хочу получить все значения столбцов в связанных моделях в одном запросе.Но я не могу получить это с помощью Flask SQLAlchemy.

Но я могу получить необходимые данные, используя SQL-запрос в phpmyadmin.

Вот запрос

SELECT 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 РЕГИСТРИРУЙТЕСЬ product_categories ПО 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}], "creationAt": 1234, "plyPositionName": "Flute"}, {"product_category": [1], "plyPositionId": 1, "обновленоВ ": null," product_category_associations ": [{" productCatId ": 1," plyPositionId ": 1}]," creationAt ": 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 голосов
/ 27 мая 2018

Думаю, я понял, что проблема не в 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)

Надеюсь, это поможет другим.

Если есть другой способ решения проблемы, пожалуйста, не стесняйтесь комментировать.

...