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
之前,查询不会 运行。如果两个参数都没有给出,你会得到所有的医生。
我正在学习这里的教程: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
之前,查询不会 运行。如果两个参数都没有给出,你会得到所有的医生。