【问题标题】:Cosmos DB - Insert Multiple Records with PythonCosmos DB - 使用 Python 插入多条记录
【发布时间】:2017-10-26 19:59:36
【问题描述】:

在 Cosmos DB 中,我可以(感谢 SO 社区)插入这样的文档:

data  = {'attribute1':1, 'attribute2': 2}
client.CreateDocument('dbs/databaseName/colls/collectionName/', data)

如果我可以一次插入多个文档,那就太好了,就像在 SQL 中你可以做的那样:

insert into table values (1, 2), (3,4), (5,6)

我知道您可以使用存储过程进行批量上传,但如果我基本上可以将一堆文档连接在一起,我认为这对我来说会更好(......或者至少让我学习如何在此时)。

【问题讨论】:

    标签: python azure azure-cosmosdb


    【解决方案1】:

    您是正确的,您可以通过存储过程插入多个文档。

    但是:没有 api 调用可以一次插入多个文档。您必须为每个文档插入执行一次调用(无论是从您的应用程序还是从存储过程完成)。

    存储过程方法将为您提供一组不那么啰嗦的调用(本质上是单个调用),并且是事务性的(全部或都不成功)。

    【讨论】:

      【解决方案2】:

      Cosmo DB python 库不支持批量上传或批量上传。因此,需要对要存储在数据库中的项目进行迭代。

      示例代码(运行时 - Python 3.6)

      import json
      import random
      import azure.cosmos.cosmos_client as cosmos_client
      import azure.cosmos.documents as doc
      
      
      from faker import Faker
      from pprint import pprint
      from easydict import EasyDict as edict
      
      config = {
          'ENDPOINT': 'https://localhost:8081',
          'PRIMARYKEY': 'CREATEME',
          'DATABASE': 'funcTest',
          'CONTAINER': 'funcTest'
      }
      
      # Initialize the Cosmos client
      connection_policy = doc.ConnectionPolicy()
      # Disable in production
      connection_policy.DisableSSLVerification = "true"
      
      client = cosmos_client.CosmosClient(url_connection=config['ENDPOINT'], auth={
          'masterKey': config['PRIMARYKEY']},
          connection_policy=connection_policy)
      
      # Create a database
      db = client.CreateDatabase({'id': config['DATABASE']})
      
      # Create container options
      options = {
          'offerThroughput': 400
      }
      
      container_definition = {
          'id': config['CONTAINER']
      }
      
      # Create a container
      container = client.CreateContainer(db['_self'], container_definition, options)
      
      fake = Faker()
      
      # Iterating over fake person data and storing in DB
      for i in range(50):
          json_data = edict({'first_name': fake.first_name(),
                             'last_name': fake.last_name(),
                             'age': random.randint(30, 50),
                             'address': {'city': fake.city(),
                                         'state': fake.state()}})
          client.CreateItem(container['_self'], json_data)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        • 2015-09-25
        • 2016-07-14
        相关资源
        最近更新 更多