我阅读了 fastapi contrib 代码。分页仅适用于 mongodb。fastapi 是否也有用于 postgres db 的分页模块?
问问题
7597 次
3 回答
8
您可以使用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[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
于 2020-11-06T19:42:46.540 回答
4
库中没有任何自动内置的功能,但您可以通过查询参数进行设置并将其传递给您的 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]
于 2020-05-15T20:27:24.017 回答
0
目前,没有内置的分页系统。您可以查看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)
于 2021-12-27T11:38:21.840 回答