Cosmos DB – Insertar múltiples registros con Python

En Cosmos DB puedo (gracias a la comunidad SO) insertar un documento así:

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

Sería genial si pudiera insertar varios documentos a la vez, como por ejemplo, en SQL puede hacerlo:

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

Entiendo que puede hacer cargas masivas con procedimientos almacenados, pero si básicamente pudiera reunir un montón de documentos, creo que funcionaría mejor para mí (… o al menos salvarme al aprender cómo escribir productos almacenados en este momento) .

Tiene razón en que puede insertar varios documentos a través de un procedimiento almacenado.

Sin embargo: no hay llamadas a la API para insertar varios documentos a la vez. Debe ejecutar una llamada por inserto de documento (ya sea desde su aplicación o desde un procedimiento almacenado).

El enfoque del procedimiento almacenado le dará un conjunto de llamadas menos habladoras (esencialmente una sola llamada), y será transaccional (todas o ninguna tendrá éxito).

La carga por lotes o la carga masiva no es compatible con la biblioteca de Python de Cosmo DB. Por lo tanto, requiere iteración sobre los elementos para ser almacenados en la base de datos.

Código de muestra (tiempo de ejecución – 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)