【问题标题】:Problem uploading a .json file containing list of json objects to Azure CosmosDB using Python script使用 Python 脚本将包含 json 对象列表的 .json 文件上传到 Azure CosmosDB 时出现问题
【发布时间】:2019-11-24 20:49:48
【问题描述】:

我想使用 python 脚本将包含 json 对象列表的 .json 文件上传到 Azure CosmosDB。

我指的是以下链接https://github.com/Azure-Samples/azure-cosmos-db-python-getting-started 用于上传包含 JSON 对象列表的 json 文件。此处使用的 Azure cosmos 客户端库仅支持一次发送一个 json 对象,但我想在单个请求中发送一个 json 对象列表。

这是我要发送的json格式

    [{
    'id': 'server1',
    'Web Site': 0,
    'Cloud Service': 0,
    'Virtual Machine': 0,
    'message': 'Hello World from Server 1!'
    },
    {
    'id': 'server2',
    'Web Site': 0,
    'Cloud Service': 0,
    'Virtual Machine': 0,
    'message': 'Hello World from Server 1!'
    }]

这是我得到的错误

nayana@nayana-HP-Notebook:~/Azure$ python3 Upload\ to\ azure\ cosmo.py 
Traceback (most recent call last):
  File "Upload to azure cosmo.py", line 52, in <module>
    'message': 'Hello World from Server 2!'
  File "/usr/local/lib/python3.5/dist-packages/azure/cosmos/cosmos_client.py", line 1023, in CreateItem
    collection_id, document, path = self._GetContainerIdWithPathForItem(database_or_Container_link, document, options)
  File "/usr/local/lib/python3.5/dist-packages/azure/cosmos/cosmos_client.py", line 1080, in _GetContainerIdWithPathForItem
    CosmosClient.__ValidateResource(document)
  File "/usr/local/lib/python3.5/dist-packages/azure/cosmos/cosmos_client.py", line 2854, in __ValidateResource
    id = resource.get('id')
AttributeError: 'list' object has no attribute 'get'

我使用 pip3 install azure-cosmos 安装了 azure-cosmos 包,其中包含 cosmos_client.py

【问题讨论】:

  • 您好,我的回答对您有帮助吗?

标签: json azure azure-cosmosdb


【解决方案1】:

据我所知,如果您在 python sdk 中使用 CreateItem 方法,则每次只能创建一个文档。没有api调用一次插入多个文档。(请参阅此线程:Cosmos DB - Insert Multiple Records with Python

当然,你可以考虑bulk import。但是目前还不支持python lib,官方文档中只能找到.net and java lib

所以,恐怕你应该加载自己的 json 文件并在循环中执行插入操作。

当然,你可以直接使用Cosmos db Migration Tool将json文件加载到cosmos db中。


更新答案:

此反馈link 中提到的 MAC 或 LINUX 迁移工具无法触及。您可以投票支持它以推动此类功能的进展。

官方建议还是使用 Bulk Executor Library for Java 和 .NET core。如果你必须使用 python,你可以参考这个非官方的blog 来获得一些线索。

【讨论】:

  • 感谢您对数据迁移工具的建议,但我希望在基于 Linux 的机器上使用此应用程序。我们得到的预编译文件是.exe。我尝试下载 Wine 来执行 .exe 文件,但它给出了一个错误,说**没有入口点,它无法执行 **
  • 感谢您的建议,以及您提到的指向 about:blank#blocked 且无法访问的博客链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多