微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cosmos SQL db 创建项

如何解决Cosmos SQL db 创建项

我有一个关于 cosmos sql db python sdk 的问题,我不知道如何解决它。

我有一个数据浏览器,里面有一些数据。我正在使用 python sdk 来查询这些数据并将输出保存在一个 json 文件中。到目前为止,一切正常。但是我想把它带到下一步,而不是将这个查询结果保存到一个 json 文件中,我想把这个 query result 直接传递给一个 cosmosdb 来存储。

这里是主要问题。

我遵循了有关 azure-cosmos 的指南。连接到我的 cosmosdb,我可以使用 python 连接。

比我使用的这段代码

######################################################
##                   COSMOS-DB                      ##
######################################################

url = "<my-url>"
key = "my-key"
client = CosmosClient(url,key)
database_name = "My-Database"
container_name = "Table"
database = client.get_database_client(database_name)
container = database.get_container_client(container_name)
data = json.dumps(str(df))
data_dict = json.loads(data)
print(data_dict)
container.create_item(body=str(data_dict))

df一个给我带来问题的数据框,因此我将其解析为字典。

但是当我尝试使用 container.createitem(body=data_dict)

我收到此错误

Traceback (most recent call last):
  File "query.py",line 72,in <module>
    container.create_item(body=data_dict)
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/core/tracing/decorator.py",line 83,in wrapper_use_tracer
    return func(*args,**kwargs)
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/cosmos/container.py",line 511,in create_item
    result = self.client_connection.CreateItem(
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/cosmos/_cosmos_client_connection.py",line 1084,in CreateItem
    options = self._AddPartitionKey(database_or_container_link,document,options)
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/cosmos/_cosmos_client_connection.py",line 2512,in _AddPartitionKey
    partitionkeyvalue = self._ExtractPartitionKey(partitionKeyDeFinition,document)
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/cosmos/_cosmos_client_connection.py",line 2526,in _ExtractPartitionKey
    return self._retrieve_partition_key(partition_key_parts,is_system_key)
  File "/Users/user/opt/anaconda3/lib/python3.8/site-packages/azure/cosmos/_cosmos_client_connection.py",line 2539,in _retrieve_partition_key
    partitionKey = partitionKey.get(part)
AttributeError: 'str' object has no attribute 'get'

此时我完全迷失了,我不明白如何解决这个问题。

更新: 这是我试图传递给宇宙的数据:

[
  {
    "_timestamp": 1622036400000,"name": "User Log Off","message": "message","userID": "userID","Events": "SignOff event","event_count": 1
  },{
    "_timestamp": 1622035800000,"event_count": 1
  }
]

那些只是整个数组的 2 个样本,大约有 300 个

我修正了之前的错误

现在我有一个合适的 json 文件正在转储。 它看起来像以前发布的那个。我运行 container.create_item(item),但出现此错误

azure.cosmos.exceptions.CosmoshttpResponseError: (BadRequest) Message: {"Errors":["The input content is invalid because the required properties - 'id; ' - are missing"]}

我相信 cosmos 会自动添加 id

解决方法

考虑到您的 data_dict 是一个项目数组,您想要做的是遍历这个数组并分别保存每个项目。

请试试这个代码:

import uuid

url = "<my-url>"
key = "my-key"
client = CosmosClient(url,key)
database_name = "My-Database"
container_name = "Table"
database = client.get_database_client(database_name)
container = database.get_container_client(container_name)
data = json.dumps(str(df))
data_dict = json.loads(data)
print(data_dict)
#Loop through each item in your "data_dict" array.
for item in data_dict:
    #Assign id to the item
    item['id'] = str(uuid.uuid4())
    print(item)
    container.create_item(body=item)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。