Python中MySQL数据迁移到MongoDB脚本的方法


Posted in Python onApril 28, 2016

MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB是一个文档数据库,在存储小文件方面存在天然优势。随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录。

一、场景:线上MySQL数据库某表迁移到MongoDB,字段无变化。

二、Python模块:

使用Python的torndb,pymongo和time模块。

*注释:首先安装setup.py,pip,MySQLdb

执行如下命令即可:

pip install torndb
pip install pymongo

三、脚本内容如下:

[root ~]#cat nmytomongo.py

#!/usr/bin/env python#fielName: mytomongo.py#Author:xkops#coding: utf-8import torndb,pymongo,time# connect to mysql databasemysql = torndb.Connection(host='127.0.0.1', database='database', user='username', password='password')#connect to mongodb and obtain total lines in mysqlmongo = pymongo.MongoClient('mongodb://ip').databasemongo.authenticate('username',password='password')countlines = mysql.query('SELECT max(table_field) FROM table_name')count = countlines[0]['max(table_field)']#count = 300print counti = 0 j = 100start_time = time.time()#select from mysql to insert mongodb by 100 lines.for i in range(0,count,100): #print a,b #print i #print 'SELECT * FROM quiz_submission where quiz_submission_id > %d and quiz_submission_id <= %d' %(i,j) submission = mysql.query('SELECT * FROM table_name where table_field > %d and table_field <= %d' %(i,j)) #print submission if submission: #collection_name like mysql table_name mongo.collection_name.insert_many(submission) else: i +=100 j +=100 continue i +=100 j +=100end_time = time.time()deltatime = end_time - start_timetotalhour = int(deltatime / 3600)totalminute = int((deltatime - totalhour * 3600) / 60)totalsecond = int(deltatime - totalhour * 3600 - totalminute * 60)#print migrate data total time consuming.print "Data Migrate Finished,Total Time Consuming: %d Hour %d Minute %d Seconds" %(totalhour,totalminute,totalsecond)

*注释:按照自己的需求更改上述代码中的数据库地址,用户,密码,库名,表名以及字段名等。

四、执行迁移脚本:

[root ~]#python nmytomongo.py &> /tmp/migratelog.txt &

脚本执行完成后查看/tmp/migratelog.txt数据迁移消耗的时间。

Python 相关文章推荐
python计算N天之后日期的方法
Mar 31 Python
Python实现提取文章摘要的方法
Apr 21 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
python遍历目录的方法小结
Apr 28 #Python
Python网络爬虫实例讲解
Apr 28 #Python
Python脚本实现自动发带图的微博
Apr 27 #Python
Python实现新浪博客备份的方法
Apr 27 #Python
Python2.7简单连接与操作MySQL的方法
Apr 27 #Python
Python判断文本中消息重复次数的方法
Apr 27 #Python
python脚本监控docker容器
Apr 27 #Python
You might like
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
python中JWT用户认证的实现
2020/05/18 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
优秀民警事迹材料
2014/01/29 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
预备党员公开承诺书
2014/05/28 职场文书
户籍证明书标准模板
2014/09/10 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
骨干教师考核评语
2014/12/31 职场文书
数学教师个人工作总结
2015/02/06 职场文书
材料员岗位职责
2015/02/10 职场文书
检讨书格式
2015/05/07 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
Vue.Draggable实现交换位置
2022/04/07 Vue.js