python 使用Boto3 dynamodb条件的问题

a5g8bdjr  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(152)

我尝试使用条件表达式测试put_item调用,在使用boto3.dynamodb.conditions中的Attr()时出现错误。

Invalid type for parameter ConditionExpression, value <boto3.dynamodb.conditions.Or object at 0x2044157a1>, type: <class 'boto3.dynamodb.conditions.Or'>. valid types: <class 'str'>

我使用的是boto3版本1.21.40。我已经参考了文档here,但仍然无法找出我的代码有什么问题。

import boto3
from boto3.dynamodb.conditions import Attr

client = boto3.client("dynamodb")

example = {
    "id": {"S": "12345"},
    "name": {"S": "foo"}
}

client.put_item(
    TableName="foo",
    Item=example,
    ReturnValues="NONE",
    ConditionExpression=(Attr("name").not_exists() | Attr("name").eq(example.get("name")))
)
s3fp2yjn

s3fp2yjn1#

使用的条件属于Table client,您使用的是低级客户端。

表客户端

ConditionExpression(condition from boto3.dynamodb.conditions.Attr method)-
属性必须满足的条件。《DynamoDB参考指南》中列出了有效条件。

底层客户端

String s(String s)
条件PutItem操作成功所必须满足的条件。

ConditionExpression="not_exists(#name) or #name = :name",
ExpressionAttributeNames={ "#name":"name"},
ExpressionAttributeValues={ ":name": example.get("name")}

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html

相关问题