python - 如何使用Python将批量数据插入Cosmos DB?

标签 python azure azure-cosmosdb azure-cosmosdb-sqlapi

我正在使用 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/

相关文章:

python - 如何在Python中调用字典中的函数

尽管 SQL 查询有效,但 Azure 门户中的 Azure 存储过程不起作用

python - 在换行符处拆分字符串

c# - 将图像 Python 代码转换为 C#

python - Ruby 哈希和 Python 字典有什么区别?

ios - 从 Azure Blob 存储中检索图像文件夹 -Swift

iis - windows azure 或 IIS 初始加载缓慢

c# - ISessionClient.AcceptMessageSessionAsync 中的 operationTimeout 实际上是做什么的?

java - 插入新文档时,Cosmos Db 触发器未运行

具有分区文档数据库的 Azure 搜索服务