[英]Fetch data from 3 different tables with SQLAlchemy or 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 庫,您可以使用Relationship
的sa_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.