如何使用 jinjasql 在 hive 上执行查询

How to execute query on hive with jinjasql

是否可以使用 jinjasql 和 pyhive 执行 hive 查询? 当我尝试它时,出现以下错误。

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

我可以使用 jinjasql 和 pyhive 执行查询,但我需要同时使用两者来防止 sql 注入。

环境(都在同一个虚拟机上。)

Pyhive 在参数中支持列表、元组和字典。虽然 jinjasql 支持多参数样式,并且如文档中所述 here

它应该 return 一个列表,除了 'named' 或 'pyformat' 会 return 一个字典。由于 Jinjasql 创建了一个 Ordereddict,它抛出了这个异常。解决方案应该是使用 return 列表的参数样式。

希望这对您有所帮助:)

更新 python 3: 在 python 3 中,您必须将参数转换为 dict.values() returns 字典值的 view 列表。

正如您提到的,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())

它可以从配置单元中获取记录。