Как в sqlalchemy получить результат вложенного запроса как аттрибут являющийся массивом?

Всем добра.
Пытаюсь написать простой запрос, одно из полей результат запроса должен быть массив записей который выюирается во вложенном вопросе.
Проблема в том, что когда я делаю выборку, вложенный запрос автоматически применяет onclause и строит выбор по соединению внешних ключей обоих таблиц.
Меня же такое поведение не устраивает я хочу получить все записи вложенной таблицы.

models.py

from app.database.base_class import Base


class Store(Base):
    storeId = sa.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, comment="уникальный код аптеки")
    name = sa.Column(sa.String, nullable=True, comment="название аптеки (короткое)")
    fullName = sa.Column(sa.String, nullable=True, comment="название аптеки (полное)")
    inn = sa.Column(sa.String, nullable=True, comment="ИНН аптеки")
    rtTerminal = sa.Column(sa.Integer, nullable=True, comment="время резерва товара c терминала. В настоящее время не используется")
    rtMobile = sa.Column(sa.Integer, nullable=True, comment="время резерва товара с мобильного приложения. В настоящее время не используется")
    rtSite = sa.Column(sa.Integer, nullable=True, comment="время резерва товара с сайта")
    editCheck = sa.Column(sa.Boolean, nullable=True, default=False, comment="признак возможности редактирования чеков")
    cancelOrder = sa.Column(sa.Boolean, nullable=True, default=False, comment="признак возможности отмены заказа")
    fullTime = sa.Column(sa.Boolean, nullable=False, default=False, comment="признак круглосуточной работы аптеки")
    schedule = relationship("Shedule", uselist=True)
    legalId = sa.Column(UUID(as_uuid=True), default=uuid.uuid4, comment="уникальный код юридического лица по справочнику")
    user_id = sa.Column(UUID(as_uuid=True), sa.ForeignKey('user.id'), index=True)
    user = relationship("User", back_populates="store")
    orderheader = relationship("OrderHeader", back_populates="store", cascade="all, delete", passive_deletes=True)
    order = relationship("Order", back_populates="store", cascade="all, delete", passive_deletes=True)

class Stock(Base):
    """Таблица партии товаров"""
    prtId = sa.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, comment="уникальный код партии")
    storeId = sa.Column(UUID(as_uuid=True), comment="уникальный код аптеки")
    nnt = sa.Column(sa.Integer, nullable=False, comment="код товара по справочнику")
    sku = sa.Column(sa.String, comment="код товара по справочнику клиента")
    qnt = sa.Column(sa.Float, nullable=False, comment="текущее количество в партии")
    series = sa.Column(sa.String, comment="серия товара")
    prcRet = sa.Column(sa.Float, nullable=False, comment="цена реализации")
    barcode = sa.Column(sa.String, comment="Штрихкод товара")
    itemname = sa.Column(sa.String, comment="Наименование лекарства")
    groupid = sa.Column(sa.Integer, comment="Id группы")
    groupname = sa.Column(sa.String, comment="Наименование группы лекарственного препарата", index=True)



Запрос ORM имеет следующий вид.
inner_stmt =  select(Store.name.label("nameStore")).subquery()
        
    stmt = select(
        Stock.itemname.label("name"),
        Stock.sku.label("article"),
        func.sum(Stock.qnt).label("quantity"),
        func.avg(Stock.prcRet).label("price"),
        Stock.man.label("manufacturer"),
        Stock.country.label("country"),
        Stock.groupid.label("groupId"),
        Stock.groupname.label("groupName"),
        inner_stmt,
        )
    stmt = stmt.group_by(Stock.sku, Stock.itemname, Stock.man, \
        Stock.country, Stock.groupid, Stock.groupname, inner_stmt)


резуьтат запроса
637a152d17273585702253.png

а мне нужно чтоб вместа nameStores был массив pharmacies
как тут
637a1571055e1458261434.png
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы