首页 > 数据库 >mark:通过实现从mysqldump全量导出中导出某个库的所有行

mark:通过实现从mysqldump全量导出中导出某个库的所有行

时间:2023-03-13 15:33:06浏览次数:45  
标签:-% 导出 db dbname mark dict mysqldump time page

环境

python3

 

mysqldump_export_one_db.py

# encoding=utf-8
'''
用于mysqldump --all-databases...全库导出数据后,需要从SQL文件中抽取某个库的信息生成新SQL文件,如果是多个库则需要重复运行导出即可。
'''
import os,time,platform

class export_one_db_sql():
    #从SQL文件中找出“Crruent Database:”对应的数据库名和行数,最终生成字典
    def __init__(self,filename):
        global db_page_dict
        db_page_dict = {}
        global db_list
        db_list = []
        if os.path.isfile(filename):
            with open(filename,mode='r',encoding='utf-8') as file:
                linenum = 0
                for line in file.readlines():
                    linenum+=1
                    if 'Current Database:' in line:
                        db = line.split()[3:4]
                        for dbname in db:
                            db_list.append(dbname.strip('`'))
                            db_page_dict[dbname.strip('`')]=linenum
                db_page_dict["last_page"]=linenum
        else:
            print ("未找到“{}”文件...".format(filename))
    
    def export_db_sql(self,filename,dbname):
        if dbname in db_page_dict.keys():
            #计算数据库在SQL文件中行的范围
            for num in range(0,len(db_page_dict)-1):
                if (list(db_page_dict.keys())[num]) == dbname:
                    start_pos = db_page_dict[list(db_page_dict.keys())[num]]
                    stop_pos = db_page_dict[list(db_page_dict.keys())[num + 1]] - 1
                    #用于Linux环境导出需要的行
                    if platform.system().lower() == 'linux':
                        print ('正在生成“{}.sql_{}”文件...'.format(dbname,time.strftime('%Y-%m-%d',time.localtime())))
                        os.popen("sed -n '{},{}p' all_db.sql > {}.sql_{}".format(start_pos,stop_pos,dbname,time.strftime('%Y-%m-%d',time.localtime())))
                        print ('“{}.sql_{}”文件已生成,请验证。'.format(dbname,time.strftime('%Y-%m-%d',time.localtime())))
                    #用于Windows环境导出需要的行
                    elif platform.system().lower() == 'windows':
                        with open(filename,mode='r',encoding='utf-8') as file:
                            with open('{}.sql_{}'.format(dbname,time.strftime('%Y-%m-%d',time.localtime())),mode='w+',encoding='utf-8') as sql_file:
                                print ('正在生成“{}.sql_{}”文件...'.format(dbname,time.strftime('%Y-%m-%d',time.localtime())))
                                num = 0
                                for line in file.readlines():
                                    num+=1
                                    if start_pos <= num <= stop_pos:
                                        print (line[0:len(line) - 1],file=sql_file)
                                print ('“{}.sql_{}”文件已生成,请验证。'.format(dbname,time.strftime('%Y-%m-%d',time.localtime())))
        else:
            print ('“{}”文件中未能找到“{}”数据库的信息。'.format(filename,dbname))

#测试程序
if __name__ == '__main__':
    filename = input("请输入需要解析的SQL文件名称:")
    export = export_one_db_sql(filename)
    print ('数据库列表:',db_list)
    dbname = input("请选择您需要导出的数据库:")
    export.export_db_sql(filename,dbname)

 

怎么使用?

[root]# python mysqldump_export_one_db.sql

 

标签:-%,导出,db,dbname,mark,dict,mysqldump,time,page
From: https://www.cnblogs.com/haha029/p/17211613.html

相关文章

  • 常用的Markdown语法
    对我的学习生涯来说笔记相当重要,个人学习的习惯就是先进行一遍学习过程中记好笔记,再根据笔记回顾,这样可以做到系统且完备的学习与回忆。此博客的意义也在于此,大学时图方便......
  • chrome导出导入har文件
    问题在特定的网络情况,需要分析网络请求一线复现问题,导出网络请求har发给二线分析强求解决har(httparchiveformat)http请求归档文件,用来保存http请求过程的文件保存h......
  • 傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)
    傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)注释都是由chatGPT生成,有什么问题可以评论交流@Value("${backup.sql.database}")privateStringdatabases;......
  • Itext实现导出PDF常用方法说明
    实现1.设置响应格式response.setContentType("application/pdf");response.setHeader("Expires","0");response.setHeader("Cache-Control","must-revalidate,post-che......
  • SpringBoot框架(43):POI高效导出百万级Excel数据?
    Excel简介什么是excel就不用介绍了,这里主要说明不同版本下每个sheet下的行列限制。版本区间行数列数生成文件后缀   image.png由上面可知Exce......
  • Markdown学习
    Markdown学习标题:“#+空格”二级标题二级标题:“##+空格”字体Hello,World!helloworld引用选择狂神学Java">"分割线“---”“”***“图片"![名字]+()"......
  • markdown学习
    Markdown学习标题标题可以用Ctrl+1、2、3来使用标题也可以用‘’#‘’加空格来命名字体Hellom,World!(两个*号)Hellom,World!(一个*号)Hellom,World!(三个*号)Hellom,W......
  • freemarker 通过ftl 导出word
    1:需要的jarfreemarker.jar  https://pan.baidu.com/s/105Ma9aVPha8YvlBkuuO4bA  提取码:b9k8或者<dependency><groupId>org.freemarker</groupId><artif......
  • Markdown格式
    标题井号+空格+标题内容字体粗体两边都加2个星号斜体两边加1个星号斜体加粗两边加3个星号删除线两边加2个波浪号引用大于号加空格分割线3个星号或3个减号......
  • SpringBoot中使用POI导出Excel时怎样循环数据库数据赋值
    场景在已经实现简单的Excel导出的前提下,要结合具体业务实现查询数据库,并遍历赋值到excel上。实现使用MyBatisPlus从数据库查询数据Map<String,Object>param=newHashMap<St......