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