
本文介绍如何避免硬编码变量解包,改用结构化数据(如字典列表)驱动 sql 语句生成,提升代码可维护性与可扩展性。
本文介绍如何避免硬编码变量解包,改用结构化数据(如字典列表)驱动 sql 语句生成,提升代码可维护性与可扩展性。
在实际开发中,当需要根据配置动态生成多组相似 SQL 操作(如 SELECT 和 DELETE),直接对列表进行固定索引解包(如 a, b, c = lst[:3])虽可行,但存在明显缺陷:逻辑耦合度高、难以复用、不易扩展,且一旦列表长度或顺序变化易引发运行时错误。
更专业、可持续的写法是将参数抽象为结构化数据单元,例如使用字典列表统一管理每组操作所需的表名与条件值。以下为优化后的完整实现:
system_code = 'Ind'
# 统一定义参数配置:每项代表一组 SELECT + DELETE 操作
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'}
]
# 统一执行循环 —— 解耦逻辑与数据
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']}'")
✅ 优势说明:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
清晰语义:键名(
select_tbl,app)明确表达用途,无需依赖位置顺序; -
安全可靠:避免因
ft_tb[:3]元素不足导致的ValueError; - 易于扩展:新增操作只需追加字典项,无需修改循环体;
-
便于测试与替换:
sql_params可来自配置文件、数据库或 API,实现数据与逻辑分离。
⚠️ 注意事项:
- 实际生产环境中,请勿直接拼接 SQL 字符串(存在注入风险),应使用参数化查询(如
cursor.execute("SELECT ... WHERE application = %s", (p['app'],))); - 若列表长度动态变化,建议增加校验:
if len(ft_tb) ; - 可进一步封装为函数,如
generate_sql_operations(system_code),增强模块化程度。
通过这种数据驱动的设计,代码不仅更健壮,也更贴近现代 Python 的工程实践标准。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










