Параметры динамического запросаPython

Программы на Python
Anonymous
Параметры динамического запроса

Сообщение Anonymous »

Я реализую FastAPI, службу SQLAlchemy, которая интегрируется с программным обеспечением ERM. Программное обеспечение ERM хранит данные в таблице как

Код: Выделить всё

Class Table():
main_option_1: Any
main_option_2: Any

class ExtraOption():
extra_option: Any

class TableExtraOption():
table_id: FK
extra_option_id: FK
value: Any
В принципе, я это сделал. Но следующим шагом будет получение списка записей таблицы. И это не имеет большого значения. Но проблема возникает, когда я пытаюсь отфильтровать набор запросов, используя параметры запроса, по полям, которые я не знаю, и даже не знаю, сколько у меня полей.
Фильтры хранятся как:

Код: Выделить всё

class CategoryOfTable():
name: str

class FilterCategory():
option: str (it maybe both main option and extra option)
category_id: FK
order: int (order of that uses frontend to show filter)
В общем, было бы хорошо решить эту проблему таким образом, потому что если кто-то добавит дополнительные опции и дополнительные фильтры в ERM, они будут загружать их в мой сервис по событию, и я не буду добавлять их. миграцию вручную.
Я прочитал несколько вопросов на stackoverflow и решил использовать схему pydantic для параметров запроса следующим образом:

Код: Выделить всё

class ExtraOptionValueQuerySchema(BaseModel):
name: Optional[str] = None

class ExtraOptionQuerySchema(BaseModel):
name: Optional[str] = None
item: Optional[List[ExtraOptionValueQuerySchema]] = Depends()

class RecordQuerySchema(BaseModel):
length_gt: Optional[float] = None
length_lt: Optional[float] = None
width_gt: Optional[float] = None
width_lt: Optional[float] = None
height_gt: Optional[float] = None
height_lt: Optional[float] = None
weight_gt: Optional[float] = None
weight_lt: Optional[float] = None
brand: Optional[str] = None
extra_options: Optional[List[ExtraOptionQuerySchema]] = Depends()

@app.get("")
async def get_records(
category_id: uuid_pkg.UUID, request: Request, query: RecordQuerySchema = Depends(), db: AsyncSession = Depends(get_db)
) -> None:
pass
И я не могу проверить, работает это или нет, потому что появляются необходимые kwargs и args (именно kwargs и args — это название параметров запроса). Это в принципе реализуемо? Есть ли у вас какие-нибудь идеи по этому поводу?

Подробнее здесь: https://stackoverflow.com/questions/786 ... parameters

Вернуться в «Python»