【问题标题】:does fastapi contrib has paginator for postgresql?fastapi contrib 有 postgresql 的分页器吗?
【发布时间】:2020-05-25 21:24:22
【问题描述】:

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

【问题讨论】:

标签: pagination fastapi


【解决方案1】:

目前,没有内置的分页系统。 您可以查看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)

【讨论】:

    【解决方案2】:

    您可以使用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[UserModel])
    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

    【讨论】:

    • 应该 response_model=Page[UserOut])response_model=Page[UserModel]
    • 是的,你是对的。固定
    【解决方案3】:

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

    FastAPI's Query Parameter Documentation 的这个示例让他们在静态数据集上使用它:

    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]
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      相关资源
      最近更新 更多