fastapi contrib 有 postgresql 的分页器吗?

use*_*053 4 pagination fastapi

我阅读了 fastapi contrib 代码。分页仅适用于 mongodb。fastapi 是否也有用于 postgres db 的分页模块?

小智 6

库中没有自动内置任何内容,但您可以通过查询参数进行设置并将其传递给 ORM,就像 SQL Alchemy 中查询对象的 offset() 和 limit() 方法一样。

FastAPI 查询参数文档中的这个示例让他们在静态数据集上使用它:

from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]
Run Code Online (Sandbox Code Playgroud)


Yur*_*bas 5

您可以使用fastapi-pagination模块,它目前与sqlalchemy和集成gino

用法如下:

from fastapi_pagination import Page, PaginationParams
from fastapi_pagination.ext.sqlalchemy import paginate


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String, nullable=False)
    email = Column(String, nullable=False)


class UserModel(BaseModel):
    id: int
    name: str
    email: str

    class Config:
        orm_mode = True


app = FastAPI()

@app.get('/users', response_model=Page[UserOut])
def get_users(db: Session = Depends(get_db), params: PaginationParams = Depends()):
    return paginate(db.query(User), params)
Run Code Online (Sandbox Code Playgroud)

请注意,此代码的目的是显示fastapi-paginationAPI。您可以在这里找到一个完整的示例:https : //github.com/uriyyo/fastapi-pagination/blob/main/examples/pagination_sqlalchemy.py