фляга-sqlalchemy динамически построить запрос - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть входные данные json, такие как:

{
  "page": 2,
  "limit": 10,
  "order": [
    {
      "field": "id",
      "type": "asc"
    },
    {
      "field": "email",
      "type": "desc"
    },
    ...
    {
      "field": "fieldN",
      "type": "desc"
    }
  ],
  "filter": [
      {
        "field": "company_id",
        "type": "=",
        "value": 1
      },
      ...
      {
        "field": "counter",
        "type": ">",
        "value": 5             
      }
  ]
}

Как динамически построить запрос sqlalchemy на основе моего входного json, если я не знаю количество полей?

Что-то вродеэто:

User.query.filter(filter.field, filter.type, filter.value).filter(filter.field1, filter.type1, filter.value1)...filter(filter.fieldN, filter.typeN, filter.valueN).order_by("id", "ask").order_by("email", "desc").order_by("x1", "y1")....order_by("fieldN"...."desc").all()

1 Ответ

0 голосов
/ 22 февраля 2019

Конвертировать JSON в словарь и получить значение.

Если ваш json находится в файле (скажем, data.json), библиотека json удовлетворит ваши потребности:

import json

f = open("data.json")
data = json.load(f)
f.close()
User.query.filter(company_id=1).order_by(data["id"], data["ask"]).order_by(data["email"], data["desc"]).all()

Если ваш json является строкой (скажем, json_data):

import json

data = json.loads(json_data)
User.query.filter(company_id=1).order_by(data["id"], data["ask"]).order_by(data["email"], data["desc"]).all()

Если ваш json является запросом из библиотеки запросов python, т.е. res = requests.get(...), то res.json() вернет словарь:

data = res.json()
User.query.filter(company_id=1).order_by(data["id"], data["ask"]).order_by(data["email"], data["desc"]).all()
...