当前位置: 首页 > 知识库问答 >
问题:

更新DynamoDB时发生客户端错误?

海信鸥
2023-03-14

代码如下

import boto3
dynamodb = boto3.resource ('dynamodb')
table =dynamodb.Table('test')
def lambda_handler(event, context):
    response = table.update_item(
        Key={
            'id': "100",
            'name': "David"
            })

我已经创建了一个DynamoDB表test我的主键是id,它是字符串。

在DynamoDB中,id100的表值是John我需要更新为David。上面是代码。为什么错误会抛出元模式

完整错误如下所示

“errorMessage”:“调用UpdateItem操作时发生错误(ValidationException):更新表达式中提供的文档路径对于更新无效”,“errorType”:“ClientError”,

在代码下面尝试

import boto3
dynamodb = boto3.resource ('dynamodb')
table =dynamodb.Table('test')
def lambda_handler(event, context):
    response = table.update_item(
    Key={
        'id': '100'
        },
    UpdateExpression='SET name = :val1',
    ExpressionAttributeValues={
        ':val1': 'David'
    })

为复制案例再添加一个表

要放置表格,请执行以下操作:输出

首先在DynamoDB中创建表newTable

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource ('dynamodb')
    table =dynamodb.Table('newTable')
    response = table.put_item(
    Item={
        'username': 'Ac',
        'first_name': 'DEF',
        'last_name': 'FHI',
        'age': 10,
        'account': 'GOld'
    })

如何获得该项目?输出

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource ('dynamodb')
    table =dynamodb.Table('newTable')
    response = table.get_item(
        Key={
            'username':'Ac'
        }
        )
    print (response)

错误

共有1个答案

楚皓君
2023-03-14

第二个问题的答案

获取和更新需要准确的要更新的项目而不是批量,所以你还需要提供相应的排序键

礼节@Sairsreenivas

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource ('dynamodb')
    table =dynamodb.Table('newTable')
    # response = table.put_item(
    # Item={
    #     'username': 'Ac',
    #     'first_name': 'DEF',
    #     'last_name': 'GH',
    #     'age': 10,
    #     'account': 'GOld'
    # })
    # try:
    #     response = table.get_item(Key={'username':'Mak'})
    # except Exception as e:
    #     print(e.response['Error']['Message'])
    # else:
    #     return response['Item']
    # item = response['Item']
    # print (item)
    #Get Item
    response = table.get_item(Key={'username':'Ac', 'last_name':'GH'})
    print (response['Item'])
    table.update_item(
        Key ={
            'username':'Ac', 'last_name':'GH'
        },
        UpdateExpression = 'SET age = :value1',
        ExpressionAttributeValues={
            ':value1':20
        }
        )
    print ("After update \n")
    response = table.get_item(Key={'username':'Ac', 'last_name':'GH'})
    print (response['Item'])
 类似资料:
  • 问题内容: 我在C#/ Visual Studio 2008中使用MySQL。我需要知道任何方法,以便如果一个用户更新数据库,则通过网络通知所有已登录用户已发生更改。如果我通过我的应用程序登录数据库,那时候数据库中最新记录的序列号是10,然后我有特权的人更新了数据库中的记录,同时我收到通知,数据库已更新为新记录。常见的例子可能是MSN Messenger的一个朋友上线时向他发出警报的提示……虽然我

  • 我有以下代码,我正在尝试决定如何处理错误: 服务器发回一个GraphQL错误对象,并将其发回,使其出现在突变的块中。如果变异成功,组件的数据将使用参数更新,但我看不到处理错误的等价方法。 理想情况下,我希望更新块中的Apollo缓存,但在这一点上,我甚至不能向组件或状态注入道具。 最终的结果是在Register组件上设置一个prop/state,它显示了一个带有条件呈现的错误消息组件。一种方法可以

  • 嗯,首先,对不起我的英语不好。 “enderecodao.java”: 和ENDERECO的WebService“servicoEnderEco.java”:

  • 我现在用C/C做并发套接字编程。我只是让服务器接收来自客户端的请求,并将响应数据包发送给客户端。我使用一个线程来接收来自客户端的请求。当服务器得到一个新请求时,一个新的线程将被创建,以便向客户端发送一些数据包。然而,当我的服务器向该特定客户端发送数据包时,我的客户端的recvfrom总是返回winsock错误10054。

  • 我正在使用GoogleSignIn pod中的此代码从IOS应用程序请求访问用户数据 然后,我在应用代理中接收访问令牌和刷新令牌,并将其发送到运行PHP并使用此google客户端库(https://github.com/googleapis/google-api-php-client)的服务器...第一个小时一切正常,访问令牌有效,允许我访问所有范围。然后一个小时后,访问令牌过期,我尝试使用此代码

  • 将一个旧项目上的Gradle更新为最新版本,我收到以下错误:。gradle\caches\transforms-1\files-1.1\CreditCardEntry-1.4.8.10。aar\453339e1f1fb2382e8ce2362a0acdedd\res\values\values。xml:11:5-54:AAPT:error:内部元素必须是资源引用或为空。 我不明白为什么会出现这个错