Azure Космос БД, Удалить IDS (определенно существует) - PullRequest
1 голос
/ 07 февраля 2020

Это, наверное, очень простая и глупая ошибка, но я не уверен, что это не так. Я использовал учебник https://github.com/Azure/azure-cosmos-python#insert -data . Как я могу запросить базу данных, а затем использовать эти ids для удаления, а затем они не существуют.

Может ли кто-нибудь помочь до наступления выходных? Спасибо, изо всех сил пытаюсь понять, как это не получается!

Ошибка:

azure.cosmos.errors.HTTPFailure: Status code: 404
{"code":"NotFound","message":"Entity with the specified id does not exist in the system., \r\nRequestStartTime: 2020-02-07T17:08:48.1413131Z,
RequestEndTime: 2020-02-07T17:08:48.1413131Z, 
Number of regions attempted:1\r\nResponseTime: 2020-02-07T17:08:48.1413131Z,
StoreResult: StorePhysicalAddress: rntbd://cdb-ms-prod-northeurope1-fd24.documents.azure.com:14363/apps/dedf1644-3129-4bd1-9eaa-8efc450341c4/services/956a2aa9-0cad-451f-a172-3f3c7d8353ef/partitions/bac75b40-384a-4019-a973-d2e85ada9c87/replicas/132248272332111641p/,
LSN: 79, GlobalCommittedLsn: 79, PartitionKeyRangeId: 0, IsValid: True, StatusCode: 404,
SubStatusCode: 0, RequestCharge: 1.24, ItemLSN: -1, SessionToken: 0#79#13=-1,
UsingLocalLSN: False, TransportException: null, ResourceType: Document,
OperationType: Delete\r\n, Microsoft.Azure.Documents.Common/2.9.2"}

Это мой код ...

def get_images_to_check(database_id, container_id):
    images = client.QueryItems("dbs/" + database_id + "/colls/" + container_id,
                                        {
                                                'query': 'SELECT * FROM c r WHERE r.manually_reviewed=@manrev',
                                                'parameters': [
                                                    {'name': '@manrev', 'value': False}
                                                ]
                                        },
                                        {'enableCrossPartitionQuery': True})
    return list(images)

def delete_data(database_id, container_id, data):
    for item in data:
        print(item['id'])
        client.DeleteItem("dbs/" + database_id + "/colls/" + container_id + "/docs/" + item['id'], {'partitionKey': 'class'})

database_id = 'ModelData'
container_id = 'ImagePredictions'
container_id = 'IncorrectPredictions'
images_to_check = get_images_to_check(database_id, container_id)
delete_data(database_id, container_id, images_to_check)```

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

При указании ключа разделения в вызове client.DeleteItem() вы выбрали:

{'partitionKey': 'class'}

Дополнительный параметр для DeleteItem() должен указывать значение вашего ключа разделения .

Согласно вашим комментариям, /class - это ключ вашего раздела. Поэтому я считаю, что если вы измените свой параметр на что-то вроде:

{'partitionKey': 'value-of-partition-key'}

Надеемся, это сработает.

1 голос
/ 07 февраля 2020

Скорее всего, проблема связана с несовпадением значений id и PartitionKey для документа. Документ уникально идентифицируется в коллекции по комбинации его идентификатора и значения PartitionKey.

Таким образом, чтобы удалить документ, необходимо указать правильные значения как для идентификатора документа, так и для его значения PartitionKey.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...