如何在python中从Azure的CosmosDB中读取数据

Ron*_*rak 3 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.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' }
Run Code Online (Sandbox Code Playgroud)

我在某处读到,该密钥将是我在Azure帐户Keys中可以找到的主密钥。我已经用图像中显示的主密钥填充了密钥字符串,但是出于保密目的,此处的密钥为空。

我还在某处读到,如果我的数据在“ test1” 集合中,则collection_link应该为“ / dbs / test1 / colls / test1” 。

我的代码在函数client.ReadCollection()处出错。

那是我有“ pydocumentdb.errors.HTTPFailure:状态代码:401 {“代码”:“未经授权”,“消息”:“的错误。输入授权令牌不能满足请求。请检查是否根据协议构建了预期的有效负载,并检查所使用的密钥。服务器使用以下有效负载进行签名:'get \ ncolls \ ndbs / test1 / colls / test1 \ nmon,2017年5月29日19:47:28 gmt \ n \ n'\ r \ nActivityId:03e13e74-8db4-4661-837a- f8d81a2804cc“}”

解决此错误后,该怎么办?我想将JSON文件作为一个大词典来获取,以便查看数据。

我在正确的道路上吗?我是否以错误的方式处理此问题?如何阅读数据库中的文档?谢谢。

Pet*_*Pan 5

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

在此处输入图片说明

因此,请检查您的密钥,但我认为关键点是使用pydocumentdb不正确。这些idDatabaseCollectionDocument来自他们的链接不同。这些API ReadCollectionQueryDocuments需要通过相关链接。您需要通过资源链接而不是资源ID来检索Azure CosmosDB中的所有资源。

根据您的描述,我认为您想在collection id path下列出所有文档/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)
Run Code Online (Sandbox Code Playgroud)

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