Как выполнить запрос FLASK SQLALCHEMY для таблицы связей

0

У меня две модели в MANY TO MANY Relationship, и я хочу получить все значения столбцов в связанных моделях в одном запросе. Но не может получить это с помощью Flask SQLAlchemy.

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

Вот запрос

ВЫБОР 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 ПО 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}], "createdAt": 1234, "plyPositionName ":" Flute "}, {" 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))

Спасибо всем заранее.

Теги:
python-3.x
flask
sqlalchemy
flask-sqlalchemy

1 ответ

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)

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню