发电机安全upd

2024-04-26 10:12:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更新我的简单数据库中的计数器(一个键,一个数值)。Atomic counters似乎是很自然的解决方案,但是我需要线程安全的更新,也就是说,我需要确保更新不会相互干扰。在

This answer似乎建议在执行实际写入之前,我需要再次检查数据是否未被其他更新修改。在

我的问题是,如何在ConditionExpression中引用数据库中的当前值? 假设tabledynamodb.Table对象(Python API),这是我为update_item编写的代码:

table.update_item(
            Key={
                'key': my_key
            },
            UpdateExpression="set my_value = my_value + :inc",

            ConditionExpression="my_value = ?????" # should be value in the db now
            ExpressionAttributeValues={
                ':inc': my_increment,
            },
            ReturnValues="UPDATED_NEW"
        )

Tags: key数据库valuemytable计数器update解决方案
1条回答
网友
1楼 · 发布于 2024-04-26 10:12:51

如果您只想使用原子计数器,则不需要条件。您链接的答案只是引用文档(您也链接了该文档),该文档声明在某些极其重要的情况下,例如增加银行帐户余额,如果您不完全确定第一次尝试增量是否成功,您将希望使用条件表达式。例如,如果您试图增加该值,但在收到DynamoDB的响应之前就失去了网络连接。在这种情况下,您不确定它是否成功,需要使用条件重试。在

您声明只需要线程安全更新,原子计数器提供这些更新而不使用条件表达式。在

相关问题 更多 >