繁体   English   中英

fastapi contrib 有 postgresql 的分页器吗?

[英]does fastapi contrib has paginator for postgresql?

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

您可以使用fastapi-pagination模块,它目前拥有集成sqlalchemygino

用法如下:

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)

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

库中没有自动内置任何内容,但您可以通过查询参数设置它并将其传递给 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]

目前,没有内置的分页系统。 您可以查看fastapi-pagination模块。 或者你可以做这样的事情:

def get_data(database: Session, page: int = 0, limit: int = 50):
    # Note not the best option for large data sets.
    try:
        data = database.query(YourBaseModel).offset(page).limit(limit).all()
        return data
    except Exception as e:
        logger.exception(e)
        raise HTTPException(status_code=500, detail='There was an error while processing your request.')

还有你的 API 代码:

@app.get('/data')
def example_data_api(database: Session = Depends(get_db), page: int = 0, limit: int = 50):
    return get_data(database=database, page=page, limit=limit)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM