AWS Lambda 调用 DynamoDB put_item 给出语法错误
AWS Lambda calling DynamoDB put_item gives syntax error
我用 Python 创建了我的第一个 Lambda,以在名为 Users 的 DynamoDB table 中创建一个新条目,它具有分区键 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,
的行的日志中,但我不知道为什么。
如有任何帮助,我们将不胜感激!
有两种定义字典文字的标准方法
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
}
我用 Python 创建了我的第一个 Lambda,以在名为 Users 的 DynamoDB table 中创建一个新条目,它具有分区键 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,
的行的日志中,但我不知道为什么。
如有任何帮助,我们将不胜感激!
有两种定义字典文字的标准方法
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
}