首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >必须对在SQLAlchemy选择后引发的结果异常调用unique()方法

必须对在SQLAlchemy选择后引发的结果异常调用unique()方法
EN

Stack Overflow用户
提问于 2022-10-24 09:22:31
回答 1查看 221关注 0票数 0

我对SQLAlchemy有一个问题,我无法找出造成此错误的原因:

所以我的班级定义是:

代码语言:javascript
运行
复制
class PricingFrequency(enum.Enum):
    month = 'month'
    year = 'year'


class PlanPricing(Base):
    __tablename__ = "PlansPricing"
    pricing_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    .....
    subscription_plan = relationship("SubscriptionPlan", back_populates="plans_pricing")
    plan_id = Column(UUID(as_uuid=True), ForeignKey("SubscriptionPlans.plan_id"))

    created_on = Column(DateTime, server_default=func.now())
    updated_on = Column(DateTime, server_default=func.now(), server_onupdate=func.now())


class SubscriptionPlanOption(Base):
    __tablename__ = "SubscriptionPlanOptions"
    option_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    .....
    subscription_plan = relationship("SubscriptionPlan", back_populates="options_plan")
    plan_id = Column(UUID(as_uuid=True), ForeignKey("SubscriptionPlans.plan_id"))

    created_on = Column(DateTime, server_default=func.now())
    updated_on = Column(DateTime, server_default=func.now(), server_onupdate=func.now())


class SubscriptionPlan(Base):
    __tablename__ = "SubscriptionPlans"
    plan_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    plan_name = Column(String)
    plan_description = Column(String)
    is_popular = Column(Boolean, default=False)

    plans_pricing: List[Any] = relationship("PlanPricing", back_populates="subscription_plan")  # , lazy='joined')
    options_plan: List[Any] = relationship("SubscriptionPlanOption",
                                           back_populates="subscription_plan")  # lazy='joined')

    created_on = Column(DateTime, server_default=func.now())
    updated_on = Column(DateTime, server_default=func.now(), server_onupdate=func.now())

当我提出这个查询时:

代码语言:javascript
运行
复制
query = (
                select(SubscriptionPlan)
                .options(joinedload(SubscriptionPlan.options_plan, innerjoin=True),
                         joinedload(SubscriptionPlan.plans_pricing.and_(PlanPricing.pricing_id == pricing_id),
                                    innerjoin=True))
            )
            items = await session.execute(query)
            items = items.scalars().all()

我收到了一条错误消息:

代码语言:javascript
运行
复制
**The unique() method must be invoked on this Result, as it contains results that include joined eager loads against collections**

注意:会话是AsyncSession

有人能解释一下这个问题的根源吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 21:48:58

我误解了sqlalchemy的装货技术。尽管如此,我的请求没有很好的格式化,因此我将其更改为那样,并且它目前正在运行。谢谢

代码语言:javascript
运行
复制
 plan_pricing_aliased1 = aliased(PlanPricing)
            plan_pricing_aliased2 = aliased(PlanPricing)
            query = (
                select(plan_pricing_aliased1.pricing_id, plan_pricing_aliased2.pricing_id).join_from(
                    plan_pricing_aliased1,
                    plan_pricing_aliased2,
                    and_(
                        plan_pricing_aliased2.currency == plan_pricing_aliased1.currency,
                        plan_pricing_aliased2.plan_id == plan_pricing_aliased1.plan_id,
                        plan_pricing_aliased2.pricing_frequency == plan_pricing_aliased1.pricing_frequency))
                .where(
                    and_(plan_pricing_aliased1.pricing_id == pricing_id, plan_pricing_aliased1.price > 0,
                         plan_pricing_aliased2.price == 0))
            )
            items = await session.execute(query)
            items = items.first()
            return items
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74179020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档