首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: Azure存储表无法插入存在的批处理项

Python: Azure存储表无法插入存在的批处理项
EN

Stack Overflow用户
提问于 2018-07-02 22:11:07
回答 2查看 491关注 0票数 0

我在python中使用Azure存储表,并尝试批量插入实体。当第一次插入一个实体时,当它不存在于表中时,它的工作速度很快(正如预期的那样)。在第二次插入相同的实体时,代码只是卡住了一分钟,没有什么真正的事情发生。

代码

这是我的批量插入:

代码语言:javascript
复制
acc_name = 'AccountName'
    acc_key = 'MyKey'
    table_name='MyTable'

    service = TableService(account_name=acc_name, account_key=acc_key)
    batch = TableBatch()
    batch.insert_entity({
        'PartitionKey': 'PARTITION1',
        'RowKey': "1",
        'someKey': 'key'
    })

    service.commit_batch(table_name, batch)

只需尝试运行此代码两次。第一次它将工作,第二次它被卡住一分钟,并返回错误:

代码语言:javascript
复制
Client-Request-ID=a734f002-7dff-11e8-b587-28c63f6cb636 Retry policy did not allow for a retry: Server-Timestamp=Mon, 02 Jul 2018 13:55:29 GMT, Server-Request-ID=4168269a-0002-0073-640c-121de2000000, HTTP status code=202, 
Exception=The specified entity already exists.RequestId:4168269a-0002-0073-640c-121de2000000Time:2018-07-02T13:55:30.4994452Z.

测试#1

我非常确定这不是计划好的行为,因为当我在C#中运行等价的代码时,它会立即抛出一个异常:“索引0中的元素已经存在”。这是有意义的..。

测试#2

我做的另一个测试是插入一个实体,而不是批处理。在这种情况下,当实体已经在表中时,它只是抛出“已经存在”异常。这很好。

我的环境

Windows 10、Python 3.6 (64位)、azure-sdk for python (版本3.0.0)。

有人能确认这一行为吗?该怎么办呢?

EN

回答 2

Stack Overflow用户

发布于 2018-07-02 22:36:19

这是预期的行为。insert_entity操作是Insert Entity REST API操作的包装器,它在实体不存在时创建一个实体,否则会失败并返回409 (Conflict)错误。同样,由于批处理操作失败,整个批处理操作也会失败。

您应该尝试使用Upsert操作。您可以使用Insert or Replace EntityInsert or Merge Entity。这些操作将确保实体被创建(如果不存在)或更新(如果存在)。Python SDK中对应的操作需要分别为insert_or_replace_entityinsert_or_merge_entity

票数 0
EN

Stack Overflow用户

发布于 2021-08-19 10:32:06

正如@Gaurav Mantri提到的,只需用insert_or_merge_entity替换insert_entity:

代码语言:javascript
复制
acc_name = 'AccountName'
acc_key = 'MyKey'
table_name='MyTable'

service = TableService(account_name=acc_name, 
                       account_key=acc_key)
batch = TableBatch()
batch.insert_or_merge_entity({
    'PartitionKey': 'PARTITION1',
    'RowKey': "1",
    'someKey': 'key'
    })

service.commit_batch(table_name, batch)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51138152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档