mysql 数据批量 sql文件格式_编程方式实现MySQL批量导入sql文件

本文介绍了如何使用Python脚本自动化生成批量导入SQL文件的batch.sql,通过source命令一次性导入大量sql文件到MySQL数据库。通过os.walk遍历文件夹,收集文件全路径,并在新的sql文件中添加source命令,简化数据库导入操作。
摘要由CSDN通过智能技术生成

有时候需要在本地导入一些stage环境的数据到本地MySQL,面对1000+的sql文件(包含表结构和数据,放在同一个文件夹下),使用navicat一个一个导入sql文件显然有点太慢了,于是考虑使用source命令批量来实现。网上看了很多人遇到这个高频的数据库sql导入问题,但是没有特别具体的解决方案,只有个大概的思路,我就抛砖引玉,作为一个详细的记录,渡人渡己。

先复习一下source的使用方法,首先要用命令行方式连接到Mysql数据库,然后使用下面的命令:

shell hljs">use database_name1

切换到需要被使用的数据库,然后再使用如下命令:

source path/to/file/table_name1.sql

本质上就是要使用这行命令来将sql文件的内容导入database_name1库里。使用source对上G大小的sql文件非常高效和丝滑,不会出现图形化界面导入的时候的卡顿或者崩溃。

但是多个sql文件(比如上千个)那么就需要source很多次,还是回到最初的问题,如何能一次性批量source进去呢?

这个时候可以想着创建一个完成批量导入的sql文件,假设命名为batch.sql,里面的内容大概如下:

source /path/to/file/table_name1.sql

source /path/to/file/table_name2.sql

source /path/to/file/table_name3.sql

...

省略900多行

source /path/to/file/table_name1000.sql

人工的去编写这个batch文件显然费力,但是我们现在目标明确了,就是要想办法实现生成这样的batch.sql文件。

可以考虑使用脚本程序来实现,把这个问题转换成一个简单的脚本任务:

对指定路径的文件夹下所有文件名进行收集,并且是每个文件的全路径+文件名写入一个新的sql文件里面。当然别忘了每行开头要添加一个source命令,一个文件单独一行。

用Python实现最简单,os.walk可以用于遍历文件夹下的文件夹和文件,get_source_batch_file.py实现如下。

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import sys

import os

'''

To get all the full path of files under a given path, not to search for sub folder's files.

'''

def get_current_dir_filename_with_full_path(path: str) -> list:

filename_list = []

for i,j,filename in os.walk(path):

for item in filename:

filename_list.append(path + item)

return filename_list

这里只处理当前目录下的文件,不会收集子目录下的文件,所以最外层的循环第一次完成后就return结果了。

然后调用部分也很简单,脚本传入第一个参数就是文件夹的路径:

# usage

# the second params from terminater is the folder path.

try:

mypath = sys.argv[1]

except IndexError:

mypath = '/Users/tony/pythonwork/test/leetCode/testsqlFiles/'

if mypath[len(mypath) - 1] != '/':

mypath += '/'

filename_list = get_current_dir_filename_with_full_path(mypath)

for filename in filename_list:

print("source " + filename)

可以看出接收参数也做了入参的路径补全的处理,同样也可以不传参数,默认值就是我们需要处理的文件夹的全路径,之所以接收入参是为了日后使用更加灵活。

最后在终端使用命令如下:

python3.7 get_source_batch_file /Users/tony/pythonwork/test/leetCode > ./batch.sql

执行完成后在当前目录下就会生成需要的batch.sql。注意,我这里是使用的python3.7命令,这是因为我本机MacOS系统自带了一个python2.7,所以我单独安装了一个python3.7,由于get_source_batch_file.py用了python3特有的type hint写法,所以必须使用3.x的python命令才能正常执行。

所以方法总比困难多,没有现成的工具,我们自己写一个就OK了。

最后source /path/to/batch.sql,大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值