[英]does fastapi contrib has paginator for postgresql?
我阅读了 fastapi contrib 代码。 分页仅适用于 mongodb。 fastapi 是否也有用于 postgres db 的分页模块?
您可以使用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)
请注意,此代码的目的是显示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.