如何用python从Azure的CosmosDB读取数据

如何用python从Azure的CosmosDB读取数据,python,azure-cosmosdb,Python,Azure Cosmosdb,我在Azure上有一个试用帐户,并已将一些JSON文件上传到CosmosDB。我正在创建一个python程序来查看数据,但在这样做时遇到了问题。这是我目前掌握的代码: import pydocumentdb.documents as documents import pydocumentdb.document_client as document_client import pydocumentdb.errors as errors url = 'https://ronyazrak.docum

我在Azure上有一个试用帐户,并已将一些JSON文件上传到CosmosDB。我正在创建一个python程序来查看数据,但在这样做时遇到了问题。这是我目前掌握的代码:

import pydocumentdb.documents as documents
import pydocumentdb.document_client as document_client
import pydocumentdb.errors as errors

url = 'https://ronyazrak.documents.azure.com:443/'
key = '' # primary key

# Initialize the Python DocumentDB client
client = document_client.DocumentClient(url, {'masterKey': key})

collection_link = '/dbs/test1/colls/test1'

collection = client.ReadCollection(collection_link)

result_iterable = client.QueryDocuments(collection)

query = { 'query': 'SELECT * FROM server s' }
我在某处读到,该密钥将是我在Azure帐户中可以找到的主键。我已经用图像中显示的主键填充了密钥字符串,但出于隐私目的,这里的密钥为空

我还从某个地方读到,如果我的数据在集合“test1”中,那么集合链接应该是“/dbs/test1/colls/test1”

我的代码在client.ReadCollection函数中出错

这就是我遇到的错误pydocumentdb.errors.HTTPFailure:状态代码:401 {code:Unauthorized,message:input authorization token无法为请求提供服务。请检查预期的负载是否按照协议生成,并检查正在使用的密钥。服务器使用以下负载进行签名:“get\ncolls\ndbs/test1/colls/test1\nmon,2017年5月29日19:47:28 gmt\n\n'\r\n活动ID:03e13e74-8db4-4661-837a-f8d81a2804cc}”

一旦这个错误被修复,还有什么可以做的呢?我想把JSON文件作为一个大字典,这样我就可以查看数据了


我走对了吗?我是不是走错了路?如何读取数据库中的文档?谢谢。

根据您的错误信息,这似乎是由于您的密钥身份验证失败造成的,正如下面的官方解释所述

因此,请检查您的密钥,但我认为关键是pydocumentdb使用不正确。数据库、集合和文档的这些id与其链接不同。这些API ReadCollection、QueryDocuments需要与传递相关的链接。您需要通过资源链接而不是资源id检索Azure CosmosDB中的所有资源

根据您的描述,我认为您希望列出集合id路径/dbs/test1/colls/test1下的所有文档。作为参考,下面是我的示例代码

from pydocumentdb import document_client

uri = 'https://ronyazrak.documents.azure.com:443/'
key = '<your-primary-key>'

client = document_client.DocumentClient(uri, {'masterKey': key})

db_id = 'test1'
db_query = "select * from r where r.id = '{0}'".format(db_id)
db = list(client.QueryDatabases(db_query))[0]
db_link = db['_self']

coll_id = 'test1'
coll_query = "select * from r where r.id = '{0}'".format(coll_id)
coll = list(client.QueryCollections(db_link, coll_query))[0]
coll_link = coll['_self']

docs = client.ReadDocuments(coll_link)
print list(docs)

请从中查看DocumentDB Python SDK的详细信息。

对于那些使用azure cosmos的用户,我打开了一个

样品 从azure.cosmos导入cosmos_客户端 导入json 配置={ ENDPOINT:ENDPOINT_来自您的COSMOS_帐户, PRIMARYKEY:Keyu来自您的COSMOS账户, DATABASE:DATABASE_ID,在您看来更像一个名字 容器:你的容器ID在你看来更像一个名字 } CONTAINER_LINK=fdbs/{CONFIG['DATABASE']}/colls/{CONFIG['CONTAINER']} FEEDOPTIONS={} FEEDOPTIONS[enableCrossPartitionQuery]=True 还有一个partitionKey提要选项,但我无法确定如何使用它。 查询={ 查询:fSELECT*from c } 初始化Cosmos客户端 client=cosmos\u client.CosmosClient url\u connection=CONFIG[ENDPOINT],auth={masterKey:CONFIG[PRIMARYKEY]} 查询一些数据 结果=client.QueryItemsCONTAINER\u链接、查询、FEEDOPTIONS 看看你的数据 打印列表结果 您还可以将列表用作JSON json.dumpslistresults,缩进=4
非常感谢。工作得很好。仅供参考。。。此语法不久将无法使用。。。