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

调用动态数据库的 aws Lambda put_item给出了语法错误

岳出野
2023-03-14

我用Python创建了我的第一个Lambda,以在名为Users的DynamoDB表中创建一个新条目,该表具有String类型的分区键UserId。我使用API网关中的POST方法调用它,使用测试函数发送请求体:

{
    "email":"testemail",
    "name":"testname testerson",
    "password":"testpassword1"
}

该方法背后的想法是生成一个 UUID 以用于主键,并且在它已被使用时,再次生成它,直到它是唯一的。lambda 函数为:

def create_user(event, context):
    status_code = 0
    response = ''
    body = event['body']
    
    # check all required fields are present
    if all(key in body.keys() for key in ['email', 'password', 'name']):
        # generate salt and hashed password
        salt = bcrypt.gensalt()
        hashed = bcrypt.hashpw(body['password'], salt)
        
        # get users table from dynamodb
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table('Users')
        
        inserted = False
        while not inserted:
            user_id = uuid.uuid4().hex
            try:
                response = table.put_item(
                    Item={
                        'UserId' = user_id,
                        'name' = body['name'],
                        'email' = body['email'],
                        'password' = hashed,
                        'salt' = salt
                    },
                    ConditionExpression = 'attribute_not_exists(UserId)'
                )
            except Exception as e:
                if e.response['Error']['Code'] == "ConditionalCheckFailedException":
                    continue
                status_code = 500
                response = 'Could not process your request'
                break
            else:
                status_code = 200
                response = 'Account successfully created'
                inserted = True
    else:
        status_code = 400
        response = 'Malformed request'
    
    return {
        'statusCode': status_code,
        'body': json.dumps(response)
    }

语法错误出现在包含“UserId”=user_id的行的日志中,但我不知道为什么。

任何帮助都将不胜感激!

共有1个答案

凌成天
2023-03-14

有两种定义字典文字的标准方法

Item={
    'UserId' = user_id,
    'name' = body['name'],
    'email' = body['email'],
    'password' = hashed,
    'salt' = salt
}

这不是其中之一。

您可以这样做:

Item={
    'UserId': user_id,
    'name': body['name'],
    'email': body['email'],
    'password': hashed,
    'salt': salt
}

或者:

Item=dict(
    UserId=user_id,
    name=body['name'],
    email=body['email'],
    password=hashed,
    salt=salt
}
 类似资料:
  • 我在过去(90年代中期)使用过ANTLR,并决定重新使用它,因为我想为赋值文件中的注释以及Unicode关键字和值提供支持。 我的简单测试文件再次证明,即使使用好的工具,编写正确的语法也是一个困难的问题。我正在使用VS2012的ANTLR语言支持插件,并用C#进行开发。所以,我对Eclipse/Java保留很满意,但是C#插件和ANTLR Nuget包(运行时和代码生成器)完全按照广告所说的那样工

  • 在下面的查询中,我使用了strftime函数来获取字符串格式的日期。它在sqlite数据库中运行良好。但是,当数据库更改为进程时,它抛出了一个错误,即“SQLSTATE[42883]:未定义函数:7错误:函数strftime(未知,没有时区的时间戳)不存在” 下面的代码在SQLite中工作,但在Postgres数据库中引发了一个错误

  • 我正在为db2创建一个存储过程。但是它给出了一个错误 SQL错误[42601]:在“SS_token_BAK”之后发现意外的标记“END-OF-STATEMENT”。预期的标记可能包括:“END IF”。.SQLCODE=-104,SQLSTATE=42601,DRIVER=4.23.42。 以下是我的存储过程。 是否有人面临此类问题。任何这方面的帮助将不胜感激。

  • 我正在尝试通过使用if else条件在我的代码中的textbox上添加验证 我在textbox上添加了focusListener,当我从textbox中删除焦点时,它将检查条件 我还在chekbox旁边创建了一个标签,它将根据条件显示文本 如果textbox中的文本不等于“Hi”,则应在textbox旁边的标签中打印“Hello 否则应打印“再见” 请帮忙

  • 问题内容: 我有一组要处理的.csv文件。使用SQL查询来处理它会容易得多。我想知道是否有某种方式可以加载.csv文件,并使用SQL语言通过python或ruby之类的脚本语言对其进行查询。用类似于ActiveRecord的东西加载它会很棒。 问题是我不想在运行脚本之前在某个地方运行数据库。在脚本语言和某些模块之外,我不需要其他安装。 我的问题是该任务应使用哪种语言以及使用哪些模块。我环顾四周,找

  • 问题内容: 当前模式与功能之一不同时,属性表示法函数调用会出错。 我创建了一个函数 我正在尝试使用docs中描述的带有属性符号的函数: 但是收到一条错误消息: 使用功能符号的查询可以正常工作: 数据库已通过备份/还原从PostgreSQL 10迁移。 给出: UPD 。发现如果我将架构设置为默认值,则可以正常工作。 问题答案: 您自己找到了问题的根源。确切地说:函数的模式必须在current中的