Cosmos DB - 使用Python插入多个记录

时间:2017-10-26 19:59:36

标签: python azure azure-cosmosdb

在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)

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

2 个答案:

答案 0 :(得分:1)

您可以通过存储过程插入多个文档。

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

存储过程方法将为您提供一组不那么繁琐的调用(基本上是一次调用),并且是事务性的(全部或全部都没有成功)。

答案 1 :(得分:0)

Batch upload or bulk upload is not supported with Cosmo DB python library. Hence, requires iteration over items to be stored in database.

Sample code (Run time - 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)