背景:
因测试性能,需要把mysql的数据导出到mongodb中。
前提:
1、用navicat或者别的什么mysql客户端先把mysql的数据表导出成json格式,本人用的是navicat。
2、利用mongodb的mongoimport工具。
代码:
#coding=utf-8
import os
import json
import subprocess
if __name__ == "__main__":
listfile=os.listdir('.')
for file in listfile:
print '处理:'+file
des_file = "d:/out/"+file
tmp = "d:/out2/"+file
without_suffix = file.split('.')[0]
suffix = file.split('.')[-1]
if suffix == 'py':
continue
in_f = open(file, 'r')
out_f = open(des_file, 'w')
# navicat 导出的格式有点点不大合适,需要把{recoder:[{item1},{item2}]}改成:[{item1},{item2}]格式
for index, line in enumerate(in_f.readlines()):
if index == 0:
out_f.write('[\n')
continue
if '"RECORDS":[' in line:
continue
else:
out_f.write(line)
in_f.close()
out_f.close()
# 删除最后一行
with open(des_file) as f:
lines = f.readlines()
curr = lines[:-1]
f = open(tmp, 'w')
f.writelines(curr)
f.close()
# 执行mongodb import命令
# -d 数据库名 -c 数据表名 -f JSON文件
cmd ='D:\MongoDB\bin\mongoimport -d"chanzai_dev" -c"%s" --jsonArray --type=json --file=D:\out2\%s.json' % (without_suffix, without_suffix)
print cmd
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)