Python中如何根据system_code提取列表变量并循环执行对应SQL操作?
看起来你已经搭好了基础逻辑框架,接下来咱们把代码优化得更简洁、更易维护,完美适配不同system_code的场景~
首先你肯定能发现,针对ft_tb和bt_tb的SQL生成逻辑几乎一模一样,重复写两遍不仅麻烦,以后要改SQL格式还得改两处,很容易出错。最省心的做法是把这部分重复逻辑封装成函数,不管处理哪个列表,直接调用函数就行。
下面是优化后的完整代码,我给你一步步拆解说明:
system_code = 'Ind' # 先根据system_code初始化对应的列表 if system_code == 'Ind': ft_tb = ['B_FT', 'S_FT', 'D_FT'] bt_tb = ['B_BT', 'S_BT', 'D_BT'] else: ft_tb = ['T_FT', 'T_FT', 'T_FT'] bt_tb = ['T_BT', 'T_BT', 'T_BT'] # 把重复的SQL生成逻辑抽成函数 def generate_sql_ops(table_list): # 你的列表刚好是3个元素,直接解包更直观,变量名也取了有意义的名字 select_table, delete_table, app_filter = table_list print(f"SELECT * FROM {select_table} WHERE application = {app_filter}") print(f"DELETE FROM {delete_table} WHERE application = {app_filter}") # 直接处理两个列表就好!前面已经根据system_code赋好对应值了,不用再重复判断 generate_sql_ops(ft_tb) generate_sql_ops(bt_tb)
关键优化点说明:
封装函数减少重复代码:
把生成SELECT和DELETE语句的逻辑放进generate_sql_ops函数后,以后不管是处理ft_tb、bt_tb,还是新增其他列表,只需要调用这个函数就行。要是以后要改SQL格式(比如加个过滤条件、调整占位符),只需要改函数里的代码,不用多处修改,省心又不容易出错。简化元素提取+提升可读性:
你的列表刚好是3个元素,直接用select_table, delete_table, app_filter = table_list解包比ft_tb[:3]更直观,而且变量名取了和业务相关的名字(比如原来的element_1改成select_table,一看就知道是用来生成SELECT语句的表),代码可读性瞬间提升。去掉多余的system_code判断:
前面已经根据system_code给ft_tb和bt_tb赋了对应的值,后面处理的时候直接调用函数就行,不用再写一遍if system_code == 'Ind',减少冗余判断,代码更清爽。
运行效果:
当system_code = 'Ind'时,代码会输出:
SELECT * FROM B_FT WHERE application = D_FT DELETE FROM S_FT WHERE application = D_FT SELECT * FROM B_BT WHERE application = D_BT DELETE FROM S_BT WHERE application = D_BT
当system_code是其他值时,会自动使用T_FT、T_BT对应的列表生成SQL,完全符合你的需求~
如果以后需要扩展,比如再加一个ct_tb列表,只需要在前面的if-else里定义好ct_tb,然后在后面加一行generate_sql_ops(ct_tb)就搞定了,非常灵活!
备注:内容来源于stack exchange,提问作者nmr

