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

yipeiwu_com6年前Python基础

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 networkx 包绘制复杂网络关系图的实现

1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行...

基于sklearn实现Bagging算法(python)

基于sklearn实现Bagging算法(python)

本文使用的数据类型是数值型,每一个样本6个特征表示,所用的数据如图所示: 图中A,B,C,D,E,F列表示六个特征,G表示样本标签。每一行数据即为一个样本的六个特征和标签。 实现Bag...

Python OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在L...

用Pygal绘制直方图代码示例

用Pygal绘制直方图代码示例

Pygal可用来生成可缩放的矢量图形文件,对于需要在尺寸不同的屏幕上显示的图表,这很有用,可以自动缩放,自适应观看者的屏幕 1、Pygal模块安装 pygal的安装这里暂不介绍,大家可参...

把pandas转换int型为str型的方法

今天在数据分析时遇到了一个小问题,这时才发现自己的基础知识真的不牢固,所以这里记录一下解决方法 问题: 我在处理完数据后得到的是一个列表,其中放入的是很多的元组,这时需要从元组中筛选数据...