1. 程式人生 > >python mysql 匯出到mongodb指令碼

python mysql 匯出到mongodb指令碼

背景:

因測試效能,需要把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)