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中的元类(metaclass)
Feb 14 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
Python循环语句之break与continue的用法
Oct 14 Python
Python3 replace()函数使用方法
Mar 19 Python
python 读取文件并替换字段的实例
Jul 12 Python
Django框架使用mysql视图操作示例
May 15 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
如何使用python包中的sched事件调度器
Apr 30 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错误级别的设置方法
2013/06/17 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
手写一个python迭代器过程详解
2019/08/27 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python自动识别文本编码格式代码
2019/12/26 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python使用列表的最佳方案
2020/08/12 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
警校毕业生自我评价
2014/04/06 职场文书
中学生操行评语
2014/04/24 职场文书
敬老院标语
2014/06/27 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Python词云的正确实现方法实例
2021/05/08 Python
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers