FastAPI 内存过滤

FastAPI in-memory filtering

我正在学习这里的教程:https://github.com/Jastor11/phresh-tutorial/tree/tutorial-part-11-marketplace-functionality-in-fastapi/backend/app 我有一个问题:我想通过不同的参数过滤模型,我该怎么做?

目前的情况是我有一份医生名单,所以我得到了所有的医生。然后根据过滤器查询参数,我过滤医生。我不能一次性完成所有操作,因为这些查询参数是可选的。

所以我在想类似的东西(伪代码):

all_doctors = await self.db.fetch_all(query=GET_ALL_DOCTORS)

if language_id:
   all_doctors = all_doctors.filter(d => doctor.language_id = language_id)

if area:
   all_doctors = all_doctors.xyzabc

我正在根据该教程试用 FastAPI,但不知道该怎么做。

我已经为不同的模型定义了一个模型文件,并且正在使用 SQLAlchemy。

我想到的一种方法是获取所有医生的 ID,然后在每个过滤步骤中传入最后一步的医生 ID,并通过不同的 sql 查询将它们集中起来,但这是使用过滤数据库,并且会导致每个过滤器参数多一个查询。我想知道如何使用ORM在内存中进行过滤。

编辑: 所以基本上,在我遵循的教程中,没有定义 SQLAlchemy 模型。本教程使用 SQL 语句。无论如何,回答我自己的问题:我首先需要定义 SQLAlchemy 模型,然后才能使用它们。

SQLAlchemy 查询对象(及其操作)returns 本身,因此您可以在 if 语句中有条件地构建查询:

query = db_session.query(Doctor)

if language_id:
    query = query.filter(Doctor.language_id == language_id)

if area_id:
    query = query.filter(Doctor.area_id == area_id)

return query.all()

在您最后调用 all 之前,查询不会 运行。如果两个参数都没有给出,你会得到所有的医生。