mysql批量替换sql文件,AUTO_INCREMENT修改为1

一、概述

使用Navicat导出数据表结构,AUTO_INCREMENT的值,会特别大。

但是因为业务需求,需要将表结构在另外一套环境执行,并且要求AUTO_INCREMENT的值必须为1。

因为初始化表sql脚本,是针对AUTO_INCREMENT为1的情况下编写的,否则运行sql脚本会出错。

二、python批量替换

由于Navicat导出了几十个数据库,涉及到上千张表,一个个手动改sql文件太麻烦了,这里使用python脚本来进行批量替换。

import os
import re

def replace_auto_increment_in_file(file_path):
    """
    读取指定的 SQL 文件,将所有 AUTO_INCREMENT 的值替换为 AUTO_INCREMENT=1,
    并直接覆盖原始文件。
    """
    try:
        # 打开文件并读取内容
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()

        # 使用正则表达式替换 AUTO_INCREMENT 的值
        updated_content = re.sub(r'(\s*AUTO_INCREMENT\s*=\s*)\d+', lambda m: f"{m.group(1)}1", content)

        # 覆盖原始文件
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(updated_content)

        print(f"替换完成,文件 {file_path} 已更新。")
    except FileNotFoundError:
        print(f"错误:文件 {file_path} 未找到。")
    except Exception as e:
        print(f"处理文件 {file_path} 时发生错误:{e}")

def replace_auto_increment_in_directory(directory_path):
    """
    遍历指定目录下的所有 .sql 文件,并对每个文件执行替换操作。
    """
    if not os.path.exists(directory_path):
        print(f"错误:目录 {directory_path} 不存在。")
        return

    # 遍历目录下的所有文件
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            if file.endswith('.sql'):  # 检查文件扩展名是否为 .sql
                file_path = os.path.join(root, file)
                replace_auto_increment_in_file(file_path)

# 使用示例
directory_path = r'E:/mysql/sql'  # 目标目录路径
replace_auto_increment_in_directory(directory_path)

注意修改变量directory_path,改为实际的路径。

运行完成之后,就可以看到上千表替换完成了,非常快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值