0

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

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

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

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

4

2 回答 2

0

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

它应该返回一个列表,除了将返回字典的“命名”或“pyformat”。由于 Jinjasql 创建了一个 Ordereddict,它抛出了这个异常。解决方案应该是使用返回列表的参数样式。

希望这可以帮助 :)

python 3 的更新:在 python 3 中,您必须将参数转换为列表,因为 dict.values() 返回字典值的视图

于 2018-05-09T06:20:05.433 回答
0

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

它可以从 hive 中获取记录。

于 2018-05-10T03:06:05.080 回答