Как выполнить запрос в улье с jinjasql - PullRequest
0 голосов
/ 08 мая 2018

Можно ли выполнить запрос для улья, используя jinjasql и pyhive?Когда я попробовал это, я получил следующую ошибку:

pyhive.exc.ProgrammingError: Unsupported param format: 
odict_values(['XXXXXXX'])

Я могу выполнить запрос как с jinjasql, так и с pyhive, но мне нужно использовать оба вместе, чтобы предотвратить инъекцию sql.

Среда (все на одной ВМ.)

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Как вы упомянули, PyHive позволяет использовать список для параметра выполнения. Я использовал функцию списка, следуя вашему предложению, чтобы преобразовать bind_params в список.

from pyhive import hive
from jinjasql import JinjaSql
j = JinjaSql()

template = "SELECT * FROM sample_07 WHERE code = {{ codex }}"
data = {'codex': '13-1061'}

query, bind_params = j.prepare_query(template, data)
updated_bind_params = list(bind_params)

cursor = hive.connect('sandbox.hortonworks.com').cursor()
cursor.execute(query, updated_bind_params)
print(cursor.fetchall())

Он может извлекать записи из улья.

0 голосов
/ 09 мая 2018

Pyhive поддерживает список, кортеж и dict в параметрах.В то время как jinjasql поддерживает стиль нескольких параметров, и, как уже упоминалось в документации здесь

, он должен возвращать список, кроме 'named' или 'pyformat', который будет возвращать словарь.Поскольку Jinjasql создает ордердикт, он выбрасывает это исключение.Решением должно быть использование стиля param, который возвращает список.

Надеюсь, это поможет:)

ОБНОВЛЕНИЕ для Python 3: В Python 3 вам придется преобразовывать параметры в список как dict.values ​​() возвращает представление значений словаря.

...