文档章节

使用peewee将数据库从mysql导入mongodb

yehun
 yehun
发布于 2017/03/30 17:17
字数 243
阅读 130
收藏 1

因为业务需要,要讲数据从mysqldb迁移到mongodb中去。结合peewee和pymongo写了一个小脚本,使用的也都是sql的原生语句读取数据。 碰到几个小坑,但是还比较容易解决。如果碰上数据量非常大,可以考虑使用peewee中的paginate方法

from peewee import *
from datetime import datetime
from pymongo import *
from decimal import Decimal

db = MySQLDatabase('test',
    host = '127.0.0.1',
    user = 'root',
    passwd = 'root',
    charset = 'utf8'
)   

db.connect()
cur =  db.execute_sql('show tables')
tables =  map(lambda x: x[0], cur.fetchall())

# client = MongoClient('localhost', 27017)
client = MongoClient('mongodb://root:root@localhost:27017/')
mdb = client['test']

count = 0 
for table in tables:
    print '*'*30
    print table
    cur = db.execute_sql('desc '+ table)
    fields  = map(lambda x: x[0], cur.fetchall())
    cur = db.execute_sql('select * from '+table)
    values =  cur.fetchall()
    data = []

    for value in values:
        # mongo不支持Decimal格式,先转为float
        value = map(lambda x: float(x) if isinstance(x, Decimal) else x, value)
        data.append(dict(zip(fields, value)))

    # 空数据插入mongo会报错,所以先做个判断
    if len(data)>0:
        mtb = mdb[table]
        mtb.insert_many(data)

    count += 1
print '*'*30
print 'totally %d tables transferred' % count

 

本文转载自:

yehun
粉丝 8
博文 218
码字总数 137225
作品 0
长宁
高级程序员
私信 提问
入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由信姜缘 发表于云+社区专栏 MongoDB是最受欢迎的NoSQL数据库引擎之一。它以可扩展,强大,可靠和易于使用而闻名。在本文中,...

云加社区
2018/08/20
0
0
Craigslist 采用 MongoDB 替代 MySQL

根据国外媒体报道,全球最大的分类信息网站Craigslist正在使用MongoDB数据库存档数据,之前该网站使用的是MySQL数据库集群。这或许是采用NoSQL数据存储的最大的网站。 以下是有关Craigslist的...

小卒过河
2011/05/17
2.6K
5
如何在Ubuntu 18.04 LTS上安装和配置MongoDB

如何在Ubuntu 18.04 LTS上安装和配置MongoDB IMCN 18分钟前暂无评论 阅读 9 次 MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库。 MongoDB是一个非关系型数据库,因...

IMCN
2018/05/05
0
0
【本人秃顶程序员】MongoDB是个好东西,希望你也会

←←←←←←←←←←←← 快!点关注 1、MongoDB是什么? MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库 2、为什么要用M...

本人秃顶程序员
01/31
32
0
DBA应用技巧:利用MySQL技能学习MongoDB

T 随着互联网的发展和新技术的不断涌现,传统意义上只管理一组同类数据库的情形已很少出现,管理不同类型的数据库是大多数数据库管理员的一种新型工作方式。在企业的实际应用中,会有各种不同...

ch2004
2011/12/07
668
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部