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

Python 如何使用jinjasql在配置单元上执行查询,python,hive,jinja2,sql-injection,pyhive,Python,Hive,Jinja2,Sql Injection,Pyhive,是否可以使用jinjasql和pyhive执行配置单元的查询? 当我尝试它时,我得到了以下错误 pyhive.exc.ProgrammingError: Unsupported param format: odict_values(['XXXXXXX']) 我可以使用jinjasql和pyhive执行查询,但我需要同时使用这两者来防止sql注入 环境(都在同一个VM上。) 0.1.6 0.5.1 Python 3.5.5 Pyhive支持参数中的列表、元组和dict。而jinjasql支

是否可以使用jinjasql和pyhive执行配置单元的查询? 当我尝试它时,我得到了以下错误

pyhive.exc.ProgrammingError: Unsupported param format: 
odict_values(['XXXXXXX'])
我可以使用jinjasql和pyhive执行查询,但我需要同时使用这两者来防止sql注入

环境(都在同一个VM上。)

  • 0.1.6
  • 0.5.1
  • Python 3.5.5

Pyhive支持参数中的列表、元组和dict。而jinjasql支持多个param样式,如文档中所述

它应该返回一个列表,除了“named”或“pyformat”将返回字典。由于Jinjasql创建了Ordereddict,因此引发了此异常。解决方案应该是使用返回列表的param样式

希望这有帮助:)

python 3的更新:
在Python3中,您必须将参数转换为list,因为dict.values()返回字典值的一部分。

正如您提到的,PyHive允许list作为执行参数,我根据您的建议使用list函数将bind_参数转换为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())
它可以从蜂巢中获取记录