CosmosDB和Python3:如何查询?

时间:2017-06-26 08:02:58

标签: python python-3.x azure azure-cosmosdb

我在我的项目中使用CosmosDB(Azure documentDB),用Python 3编写。

我一直在寻找一段时间,但我无法找到如何查询我的表格。我已经看到了一些示例代码,但是我没有看到如何查询的示例...我所能做的就是获取所有文档(当我的数据库大于80GB时不理想)。

GitHub repo显示了一组非常小的数据库和集合操作:https://github.com/Azure/azure-documentdb-python/blob/master/samples/CollectionManagement/Program.py

following SO帖子显示了如何阅读所有文档...但不是如何执行查询,例如“WHERE = X;”

如果有人可以指出我正确的方向,并且可能提供一个展示如何运行查询的示例,我真的很感激。

3 个答案:

答案 0 :(得分:4)

根据我的理解,我想您想知道如何使用Python执行类似SQL的查询来检索DocumentDB API的Azure CosmosDB上的文档,请参阅以下here中的代码。

  

使用SQL

执行查询
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']

query = { 'query': 'SELECT * FROM server s' }    
docs = client.QueryDocuments(coll_link, query)
print list(docs)

上面的代码使用方法QueryDocuments

如有任何疑虑,请随时告诉我。

更新:结合我链接的其他SO线程的示例代码,如下所示。

word_dict = dict()
for word_count in words:
    if word_count[0] not in word_dict:
        word_dict[word_count[0]] = word_count[1]

答案 1 :(得分:0)

我最近遇到了类似的问题。您可以通过调用fetch_next_block()来获取块(而不是整个查询集)。

query = "select * from c"
options = {'maxItemCount': 1000, 'continuation': True}
q = db_source._client.QueryDocuments(collection_link, query, options)
block1 = q.fetch_next_block()
block2 = q.fetch_next_block()

答案 2 :(得分:0)

query = 'SELECT * FROM c'
docs = list(client.QueryItems(coll_link,query))

QueryDocuments已替换为QueryItems。