如何用if/else构造适配AWS Aurora Serverless API的Python参数字典列表
符合boto3 Aurora Serverless入参规则的参数列表构造方法
可以通过「列配置清单遍历生成」的方式实现动态适配None值的入参结构,不需要硬编码每一列的判空逻辑,代码可维护性更高,具体实现如下:
核心实现逻辑
- 先统一整理所有列的元信息:列名、关联的全局变量值、对应的boto3值类型字段名
- 遍历每一项判断值是否为
None:如果是就生成isNull: True的结构,否则生成带value字段的常规结构
代码示例
# 定义列配置清单,每一项格式为 (列名, 关联变量, 对应的值类型字段) col_config_list = [ ("col1", gv_col1, "stringValue"), ("col2", gv_col2, "longValue"), ("col3", gv_col3, "longValue"), ("col4", gv_col4, "stringValue"), ("col5", gv_col5, "doubleValue"), ] v_sql_parameters = [] for col_name, col_val, val_type in col_config_list: if col_val is None: v_sql_parameters.append({"name": col_name, "isNull": True}) else: v_sql_parameters.append({ "name": col_name, "value": {val_type: col_val} })
如果偏好更紧凑的写法,也可以用列表推导式实现同样效果:
v_sql_parameters = [ {"name": c_name, "isNull": True} if c_val is None else {"name": c_name, "value": {c_type: c_val}} for c_name, c_val, c_type in col_config_list ]
注意事项
判空时请使用
is None做身份判断,不要用== None,避免遇到重写了相等判断逻辑的自定义对象时出现判断偏差,更适配boto3接口的入参校验逻辑。
效果验证
模拟变量赋值测试:
# 模拟全局变量值 gv_col1 = None gv_col2 = 1001 gv_col3 = 2002 gv_col4 = "测试字符串" gv_col5 = 6.28
运行代码后生成的参数结构完全匹配接口要求:
[ {'name': 'col1', 'isNull': True}, {'name': 'col2', 'value': {'longValue': 1001}}, {'name': 'col3', 'value': {'longValue': 2002}}, {'name': 'col4', 'value': {'stringValue': '测试字符串'}}, {'name': 'col5', 'value': {'doubleValue': 6.28}} ]
这种方式的优势是:
- 从根源上避免直接把
None传入stringValue、longValue等值字段触发的boto3接口参数校验报错 - 后续新增列时,只需要在
col_config_list里加一行配置即可,不需要重复写判空和字典构造逻辑,不容易出现漏改、结构不匹配的问题
内容的提问来源于stack exchange,提问作者museshad
相关产品推荐
相关产品推荐

