首页 文章

CosmosDB和Python3:如何查询?

提问于
浏览
1

我在我的项目中使用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;"

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

2 回答

  • 2

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

    使用SQL执行查询#在SQL中查询它们
    query = {'query':'SELECT * FROM server s'}

    options = {}
    options ['enableCrossPartitionQuery'] = True
    options ['maxItemCount'] = 2

    result_iterable = client.QueryDocuments(collection ['_ self'],query,options)
    results = list(result_iterable);

    打印(结果)

    上面的代码使用方法QueryDocuments .

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


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

    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)
    
  • 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()
    

相关问题