json - 使用 Python 脚本将包含 json 对象列表的 .json 文件上传到 Azure CosmosDB 时出现问题
问题描述
我想使用 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 安装了包含 cosmos_client.py的 azure-cosmos 包
解决方案
据我所知,如果您在 python sdk 中使用 CreateItem 方法,则每次只能创建一个文档。一次插入多个文档没有 api 调用。(请参阅此线程:Cosmos DB - 使用 Python 插入多个记录)
当然,您可以考虑批量进口。但是目前还不支持python lib 。官方文档中只能找到.net和java lib 。
所以,恐怕你应该加载自己的 json 文件并在循环中执行插入操作。
当然,您可以使用Cosmos db 迁移工具直接将 json 文件加载到 cosmos db 中。
更新答案:
此反馈链接中提到的 MAC 或 LINUX 无法触及迁移工具。您可以投票支持它以推动此类功能的进展。
官方建议仍然使用 Bulk Executor Library for Java 和 .NET core。如果你必须使用python,你可以参考这个非官方的博客 来获得一些线索。
推荐阅读
- bash - 等待命令在 Bash 脚本中未按预期运行
- python-3.x - 从一组字符串中查找整数
- python - 当我有唯一列表时如何停止该功能?
- dart - 当用户点击任何一天时,如何在日历天数下显示值
- jquery - 如何在输入时从远程服务器动态加载并显示给用户
- python - 他们是使用第一列作为索引将单个二维数组拆分为多个不同形状的一维数组的方法吗?
- python - 如何训练具有预测值的 keras 模型?
- javascript - 循环遍历一个对象,并从另一个对象设置其值
- elasticsearch - 如何保护弹性搜索 API
- python - 根据项目类型在python中解析json嵌套的dict项目