You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用boto3操作多DynamoDB表:主表无用户时先新增再添加技能

Python脚本实现DynamoDB用户存在性校验与技能添加逻辑

核心逻辑

  • 用主键精准查询替代扫描,高效判断主表中目标用户是否存在
  • 用户不存在时,先向主表插入基础用户数据,再往Skills表添加技能
  • 用户已存在时,直接向Skills表插入技能数据

代码实现

import boto3

# 初始化DynamoDB资源
dynamodb = boto3.resource('dynamodb')
# 替换为你的实际表名
person_table = dynamodb.Table('Person')
skills_table = dynamodb.Table('Skills')

def add_skill(person_id, skill_info):
    # 1. 检查主表用户是否存在
    try:
        resp = person_table.get_item(Key={'personId': person_id})
        user_exists = 'Item' in resp
    except Exception as e:
        print(f"查询用户状态出错: {str(e)}")
        return

    # 2. 用户不存在则创建主表记录
    if not user_exists:
        try:
            # 按你的主表结构补充必填字段
            person_table.put_item(
                Item={
                    'personId': person_id,
                    'name': skill_info.get('user_name', '未知用户'),
                    'createdAt': str(person_table.meta.client.get_time())
                }
            )
            print(f"已创建用户 {person_id}")
        except Exception as e:
            print(f"创建用户失败: {str(e)}")
            return

    # 3. 向Skills表添加技能
    try:
        skills_item = {
            'personId': person_id,
            'skillId': skill_info['skill_id'],  # 匹配Skills表主键/排序键
            'skillName': skill_info['skill_name'],
            'proficiency': skill_info.get('proficiency', '入门'),
            'updatedAt': str(skills_table.meta.client.get_time())
        }
        skills_table.put_item(Item=skills_item)
        print(f"技能 {skill_info['skill_name']} 已添加给用户 {person_id}")
    except Exception as e:
        print(f"添加技能失败: {str(e)}")

# 调用示例
if __name__ == '__main__':
    test_skill = {
        'skill_id': 'SKILL_001',
        'skill_name': 'Python开发',
        'proficiency': '精通',
        'user_name': '张三'
    }
    add_skill('PERSON_001', test_skill)

关键注意事项

  • 务必使用get_item查询用户:相比全表扫描,主键查询性能提升极大,符合DynamoDB最佳实践
  • 主表插入字段需严格匹配你的表结构,确保包含所有必填属性
  • Skills表的外键(如personId)必须与主表主键保持一致,保证关联关系有效
  • 若需强一致性,可改用transact_write_items实现事务,避免用户创建成功但技能添加失败的情况

内容的提问来源于stack exchange,提问作者Xrayman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:41:00