簡體   English   中英

有沒有辦法在前端的sqlmodel中對相關數據進行分頁

[英]Is there a way to paginate related data in sqlmodel on the frontend

sqlmodel 文檔給出了兩個類的示例

class Team(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    headquarters: str

    heroes: List["Hero"] = Relationship(back_populates="team")


class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    secret_name: str
    age: Optional[int] = Field(default=None, index=True)

    team_id: Optional[int] = Field(default=None, foreign_key="team.id")
    team: Optional[Team] = Relationship(back_populates="heroes")

我可以使用以下代碼示例獲得團隊 object

def get_team():
    with Session(engine) as session:
        statement = select(Team).where(Team.name == "avengers")
        result = session.exec(statement)
        avengers = result.one()
        return avengers

並執行avengers.heroes應該返回與 object 相關的所有英雄的列表,但是如果列表包含數千個項目怎么辦? 有沒有一種方法可以對此進行分頁,而不必自己單獨查詢 heroes 表?

為此,您必須使用底層 SQLAlchemy 庫,您可以使用Relationshipsa_relationship_kwargs參數來實現。

正如這個答案中提到的,如果您將關系指定為動態關系,則可以對其進行分頁。 使用 SQLModel,它看起來像這樣:

class Team(SQLModel, table=True):
    ...
    heroes: List["Hero"] = Relationship(
        back_populates="team",
        sa_relationship_kwargs={"order_by": "Hero.name", "lazy": "dynamic"},
    )

# When calling it
first_ten_heroes = team.heroes[:10]  # or team.heroes.limit(10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM