Как l oop через список чисел, используя вложенные l oop в Jinja Sql () - PullRequest
0 голосов
/ 02 апреля 2020

Мне было поручено шаблонирование некоторых наших sql скриптов с JinjaSql(). Я попал в легкую тупиковую ситуацию, которую, похоже, не могу понять. У меня есть sql CASE заявление, которое выглядит так:

    CASE
      WHEN dob_age BETWEEN 0 AND 17 THEN '0 - 17'
      WHEN dob_age BETWEEN 18 AND 25 THEN '18 - 25'
      WHEN dob_age BETWEEN 26 AND 30 THEN '26 - 30'
      WHEN dob_age BETWEEN 31 AND 35 THEN '31 - 35'
      WHEN dob_age BETWEEN 36 AND 40 THEN '36 - 40'
      WHEN dob_age BETWEEN 41 AND 45 THEN '41 - 45'
      WHEN dob_age BETWEEN 46 AND 50 THEN '46 - 50'
      WHEN dob_age BETWEEN 51 AND 55 THEN '51 - 55'
      WHEN dob_age BETWEEN 56 AND 60 THEN '56 - 60'
      WHEN dob_age >= 61 THEN '61+'
  END
    AS age_bucket,

, чтобы воспроизвести это с JinjaSql() Я пробовал следующее в python:

template = """
CASE{% for age in ages %}
{% for b in age.bucket %}
WHEN dob_age BETWEEN {% for a in age.dob_age %}{{a | sqlsafe}} AND {{a | sqlsafe}}{%- endfor %} 
THEN '{{b | sqlsafe}}'
{%- endfor %}
{%- endfor %}
END
AS age_bukcet
"""

вышесказанное как-то объединяет числа в группы, подобные этой:

CASE

WHEN dob_age BETWEEN 0 AND 017 AND 1718 AND 1825 AND 2526 AND 2630 AND 3031 AND 3135 AND 3536 AND 3640 AND 4041 AND 4145 AND 4546 AND 4650 AND 5051 AND 5155 AND 5556 AND 5660 AND 6061 AND 61 
THEN '0 - 17'
WHEN dob_age BETWEEN 0 AND 017 AND 1718 AND 1825 AND 2526 AND 2630 AND 3031 AND 3135 AND 3536 AND 3640 AND 4041 AND 4145 AND 4546 AND 4650 AND 5051 AND 5155 AND 5556 AND 5660 AND 6061 AND 61 
THEN '18 - 25'
...

WHEN dob_age BETWEEN 0 AND 017 AND 1718 AND 1825 AND 2526 AND 2630 AND 3031 AND 3135 AND 3536 AND 3640 AND 4041 AND 4145 AND 4546 AND 4650 AND 5051 AND 5155 AND 5556 AND 5660 AND 6061 AND 61 
THEN '61+'
END
AS age_bukcet

Буду признателен за помощь. Только начал изучать Джинджу 2 дня go, так что я все еще довольно мокрый за ушами. Я также был бы признателен за помощь в том, чтобы убедиться, что 61+ использует >= вместо BETWEEN, если это возможно

Мои параметры и сценарий генерации запросов выглядят так:

data = {
    "ages": [
        {"dob_age":[0,17,18,25,26,30,31,35,36,40,41,45,46,50,51,55,56,60,61], 
         "bucket":["0 - 17","18 - 25","26 - 30","31 - 35","36 - 40","41 - 45","46 - 50","51 - 55", "56 - 60", "61+"]}
    ]
}

query, bind_params = j.prepare_query(template, data)
print(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...