如何正确地为pyDocumentDB查询提供元组参数

时间:2017-03-01 13:47:32

标签: python-2.7 azure azure-cosmosdb

我尝试过多种方式发送一个元组参数,如: {"name": "@p", "value": tuple(['a','b']) }

查询,简单如下:

select * from c where c.p in @p

我总是遇到语法错误或没有结果。 当我将参数从控制台复制到查询时,我得到了预期的结果。

帮助?

1 个答案:

答案 0 :(得分:1)

根据REST参考Querying DocumentDB resources using the REST API的{​​{3}}部分,对参数值的要求如下所示。

  

参数必需。指定为名称值对的JSON参数数组。参数数组可以包含从零到多个参数。每个参数必须具有以下值:name:参数的名称。参数名称必须是有效的字符串文字,并以“@”开头。 value:参数的值。可以是任何有效的JSON值(字符串,数字,对象,数组,布尔值或null)。

因此,您可以为DocumentDb查询传递Python元组参数,请使用['a', 'b']而不是tuple(['a', 'b'])之类的数组,或者只使用list(tuple(['a', 'b']))之类的代码进行转换。

<强>更新

我查看了pydocumentdb的源代码,发现DocumentDb查询的请求正文中的parameters是使用方法json.wraps序列化的,tuple将序列化listjson.wraps(('a', 'b'))。例如,执行代码['a', 'b'],然后获取结果pydocumentdb。因此,如果使用null,您的案例的唯一方法是直接将元组值嵌入到查询字符串中。