如何使用jinjasql在配置单元上执行查询

t9aqgxwy  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(816)

是否可以使用jinjasql和pyhive对配置单元执行查询?当我试的时候,我犯了以下错误。

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

我可以使用jinjasql和pyhive执行查询,但是我需要同时使用这两种方法来防止sql注入。
环境(都在同一个虚拟机上。)
hortonworks数据平台(hdp®) 2.6.4用于virtualbox的hortonworks沙盒
jinjasql 0.1.6版
Hive0.5.1
python 3.5.5版

wztqucjr

wztqucjr1#

正如您所提到的,pyhive允许list作为execute参数,我按照您的建议使用list函数将参数转换为list。

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中获取记录。

p4rjhz4m

p4rjhz4m2#

pyhive在params中支持list、tuple和dict。而jinjasql支持多个param样式,如本文文档中所述
它应该返回一个列表,但“named”或“pyformat”将返回字典。因为jinjasql创建了ordereddict,所以它抛出了这个异常。解决方案应该是使用返回列表的param样式。
希望这有帮助:)
更新python3:在python3中,必须将参数转换为list,因为dict.values()返回字典值的视图。

相关问题