Python中编写重复SQL INSERT语句的更优实现方法
解决方案
你可以把可变的表名单独抽成列表,通过循环批量生成SQL语句并执行,完全不用逐行写重复代码,参考实现如下:
import pymysql # 数据库连接配置(替换为你自己的实际参数) db_config = { "host": "127.0.0.1", "user": "your_username", "password": "your_password", "database": "your_db", "charset": "utf8mb4" } # 1. 定义所有需要插入的目标表名 target_tables = ["table_a", "table_b", "table_c", "table_d", "table_e", "table_f", "table_g", "table_h", "table_i", "table_j", "table_k", "table_l", "table_m"] # 2. 固定的字段和源表,抽成变量方便后续统一修改 insert_cols = "col1,col2,col3" source_table = "temp" # 3. 连接数据库批量执行 conn = pymysql.connect(**db_config) try: with conn.cursor() as cursor: for table in target_tables: # 动态生成SQL语句 sql = f"INSERT INTO {table} ({insert_cols}) SELECT {insert_cols} FROM {source_table};" cursor.execute(sql) # 全部执行成功再提交事务 conn.commit() print("所有表数据插入成功") except Exception as e: # 执行失败回滚,保证数据一致性 conn.rollback() print(f"执行出错,已回滚:{e}") finally: conn.close()
可根据实际场景调整的细节:
- 如果你用的是其他数据库驱动(比如PostgreSQL的psycopg2、SQLAlchemy等),只需要修改数据库连接和执行的对应逻辑,动态生成SQL的逻辑完全通用
- 如果后续需要调整字段、源表,只需要修改
insert_cols和source_table变量即可,不用挨个修改所有SQL - 示例默认加了事务控制,只要有一张表插入失败就会全部回滚,避免数据不一致,如果不需要事务可以自行去掉相关逻辑
内容的提问来源于stack exchange,提问作者hellodev
相关产品推荐
相关产品推荐

