
本文介绍如何避免硬编码变量赋值,通过结构化数据(如字典列表)动态提取参数并批量生成sql语句,提升代码可维护性与可扩展性。
本文介绍如何避免硬编码变量赋值,通过结构化数据(如字典列表)动态提取参数并批量生成sql语句,提升代码可维护性与可扩展性。
在实际开发中,当需要根据配置(如 system_code)动态选择多组相关参数并执行相似逻辑(如生成SELECT/DELETE语句)时,直接对每个列表进行切片解包(如 element_1, element_2, element_3 = ft_tb[:3])不仅冗余,还容易因列表长度变化引发 ValueError,且难以统一管理逻辑。
更优的做法是将参数组织为结构化数据容器(如字典列表),每项明确表示一次操作所需的全部上下文(如查询表、删除表、应用条件),再通过单一层循环统一处理:
system_code = 'Ind'
if system_code == 'Ind':
sql_params = [
{'select_tbl': 'B_FT', 'delete_tbl': 'S_FT', 'app': 'D_FT'},
{'select_tbl': 'B_BT', 'delete_tbl': 'S_BT', 'app': 'D_BT'}
]
else:
sql_params = [
{'select_tbl': 'T_FT', 'delete_tbl': 'T_FT', 'app': 'T_FT'},
{'select_tbl': 'T_BT', 'delete_tbl': 'T_BT', 'app': 'T_BT'}
]
# 统一执行逻辑,与 system_code 解耦
for p in sql_params:
print(f"SELECT * FROM {p['select_tbl']} WHERE application = '{p['app']}'")
print(f"DELETE FROM {p['delete_tbl']} WHERE application = '{p['app']}'")✅ 优势说明:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
-
健壮性:不再依赖固定长度解包,避免
ValueError: not enough values to unpack; -
可读性:键名(
'select_tbl'、'app')直观表达语义,无需记忆索引位置; - 可扩展性:新增一类操作只需追加字典项,无需复制粘贴整段逻辑;
-
可测试性:
sql_params可独立构造、校验或 mock,便于单元测试。
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- SQL 拼接存在注入风险,生产环境务必使用参数化查询(如
cursor.execute("SELECT ... WHERE application = %s", [p['app']])); - 若列表项数量不固定(如
ft_tb长度可能 >3),建议用zip()或itertools.batched()分批处理,而非硬写[:3]; - 可进一步封装为函数,例如
def generate_sql_statements(params_list): ...,实现逻辑复用。
综上,将“数据”与“行为”分离——用字典列表承载配置,用循环抽象通用流程——是 Python 中处理此类场景的典型工程实践。

















