FastAPI:返回关系行会导致最大递归深度

问题描述 投票:0回答:0

这是我的表格的定义方式:

class User(Base):
   __tablename__ = 'user'
   id: Mapped[int] = mapped_column(INTEGER, primary_key=True, init=False)
   username: Mapped[str] = mapped_column(VARCHAR, unique=True)

   purchases: Mapped[list['Purchase']] = relationship(back_populates= 'user', init=False, cascade='all, delete', repr=False)

class Company(Base):
   __tablename__ = 'company'
   id: Mapped[int] = mapped_column(INTEGER, primary_key=True, init=False)
   name: Mapped[str] = mapped_column(VARCHAR)
   
   products: Mapped[list['Product']] = relationship(back_populates='company', init=False, repr = False)


class Product(Base):
   __tablename__ = 'product'
   id: Mapped[int] = mapped_column(INTEGER, primary_key=True, init=False)
   name: Mapped[str] = mapped_column(VARCHAR, index=True)

   company_id: Mapped[int] = mapped_column(ForeignKey('company.id'), init=False)

   company: Mapped['Company'] = relationship(back_populates='products', repr = False)
   purchases: Mapped[list['Purchase']] = relationship(back_populates= 'product', init=False, repr = False)


class Purchase(Base):
   __tablename__ = 'purchase'
   id: Mapped[int] = mapped_column(INTEGER, primary_key=True, init=False)
   cost: Mapped[float] = mapped_column(NUMERIC(10, 2), index=True)

   user_id: Mapped[int] = mapped_column(ForeignKey('user.id'), init=False)
   product_id: Mapped[int] = mapped_column(ForeignKey('product.id'), init=False)

   user: Mapped['User'] = relationship(back_populates='purchases', repr=False)
   product: Mapped['Product'] = relationship(back_populates='purchases', repr=False)

这是我获取用户购买的端点:

@user_router.get('/get_user_purchases/{id}')
async def get_user_purchases(id: int, session: Session = Depends(get_session)):

      user = session.query(User).where(User.id == id).first()
      print(user.purchases) # works fine
      return user.purchases
      # RecursionError: maximum recursion depth exceeded while calling a Python object

将其打印到终端工作正常,但为什么从端点返回它会导致最大 递归深度超出错误?

sqlalchemy fastapi postgresql-9.1
© www.soinside.com 2019 - 2024. All rights reserved.