如何解决使用Python同步写入AmazonDB
我正在将事件记录到AmazondDB中的两个不同的表中。主表是所有事件的运行日志。摘要表每位用户有一条记录。因此,在摘要表中,我将每个事件的日志保存在数组中。要构建数组,我选择当前记录并将其附加到数组末尾。 但是,我观察到,有时,lambda相当随机地更新主表而不是摘要表。无法同步两个插入,这是我做错了什么?
import json import boto3 from datetime import datetime,timedelta,timezone from boto3.dynamodb.conditions import Key,Attr from botocore.exceptions import ClientError import logging logger = logging.getLogger() logger.setLevel(logging.INFO) dynamodb=boto3.resource('dynamodb') def add_log(user_id,qset_id,q_no): table= dynamodb.Table('SUMMARY_TABLE') ts = datetime.now(timezone.utc) #get item try: response = table.get_item( Key={ 'user_id': user_id,'qset_id': qset_id } ) except ClientError as e: print(e.response['Error']['Message']) raise # Create the first record if not exists if 'Item' not in response: #print('add a new document') log={'id':1,'q_no':q_no,'dt':str(ts)} table.put_item( Item={ 'user_id':user_id,'qset_id': qset_id,'log': [log],'log_id':1,'st_date':str(ts) }) else: # Add to the log item = response['Item'] log_id = item['log_id'] + 1 st_date = item['st_date'] log={'id':log_id,'dt':str(ts)} loglist = item['log'] loglist.append(log) table.put_item( Item={ 'user_id':user_id,'log': loglist,'log_id':log_id,'st_date':st_date }) logger.info('## Done Log') return def lambda_handler(event,context): #data = json.loads(event) if 'user_id' in event: user_id = event['user_id'] if 'qset_id' in event: qset_id = event['qset_id'] if 'q_no' in event: q_no = event['q_no'] now = datetime.now(timezone.utc) # Add to main table table= dynamodb.Table('MAIN_TABLE') table.put_item( Item={ 'user_id': user_id,'dt': str(now) } ) logger.info('Done Main') # Add to summary table add_log(user_id,q_no); return { 'statusCode': 200,'body': json.dumps('Success from API!' ) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。