我正在使用 Python 开发一个应用程序,它使用 Azure Cosmos DB 作为主数据库。在应用程序中的某个时刻,我需要将批量数据(一批项目)插入到 Cosmos DB 中。到目前为止,我一直在使用Azure Cosmos DB Python SDK for SQL API用于与 Cosmos DB 通信;但是,它没有提供批量数据插入的方法。
据我了解,这个SDK提供了这些插入方法,这两种方法都只支持单项插入,在for
循环中使用时会非常慢:
.upsert_item()
.create_item()
是否有其他方法可以使用此 SDK 插入批量数据,而不是在 for
循环中使用上述方法?如果没有,是否有 Azure REST API 可以处理批量数据插入?
最佳答案
Cosmos DB 服务不通过其 REST API 提供此服务。 Bulk模式是在SDK层实现的,遗憾的是Python SDK还不支持bulk模式。但它确实支持异步 IO。这是一个可能对您有帮助的示例。
from azure.cosmos.aio import CosmosClient
import os
URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
DATABASE_NAME = 'myDatabase'
CONTAINER_NAME = 'myContainer'
async def create_products():
async with CosmosClient(URL, credential=KEY) as client:
database = client.get_database_client(DATABASE_NAME)
container = database.get_container_client(CONTAINER_NAME)
for i in range(10):
await container.upsert_item({
'id': 'item{0}'.format(i),
'productName': 'Widget',
'productModel': 'Model {0}'.format(i)
}
)
更新:我记得在 Cosmos DB for Python SDK 中进行批量插入的另一种方法是使用存储过程。有一些关于如何编写这些的示例,包括演示传递数组的示例,这正是您想要做的。我还会看看有界执行,因为您也想实现它。您可以在这里学习如何编写它们,How to write stored procedures 。那么这里如何注册和调用呢,How to use Stored Procedures 。 注意: 这些只能在传递分区键值时使用,因此您只能在逻辑分区内执行批处理。
关于python - 如何使用Python将批量数据插入Cosmos DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73225265/