撸了个 django 数据迁移工具 django-supertube

支持字段映射和动态字段转化。 欢迎 star,issue

https://github.com/FingerLiu/django-supertube

起因

最近参与了公司系统的重构,重构基本完成后,由于数据库表结构变化很大,很多小组都需要数据迁移。如果都写 sql 的话,要做很多重复的工作。于是去搜了下 django 有没有相关的工具,很遗憾没有搜到,于是自己撸了这个数据迁移的轮子。

主要功能

A powerful django migration tool to migrate from latency database to new databse using awesome django ORM

使用 django 强大的 ORM 系统灵活的进行数据迁移工作。

目前包含以下功能点:

  • 支持相同字段自动映射
  • 批量写入
  • 支持修改字段映射
  • 支持通过调用函数的方式
  • 自动修复 postgres sequence
  • 实时进度提醒
  • 数据量大时支持并行执行(开发中)

django-supertube

A powerful django migration tool to migrate from latency database to new databse using awesome django ORM

例子

settings.py

DATABASES = {
'default': config('DATABASE_URL', cast=db_url),
'latency': config('LATENCY_DATABASE_URL', cast=db_url)
}

management/commands/mig_01_user.py

from django.utils import timezone
from si.tools.supertube import SuperTube, TubeSet
"""
class LatencyUser:
email
password
age class User:
email
age
username
password
is_admin
create_datetime 例子从 latency 数据库的 LatencyUser 取数据迁移到 default 数据库的 User 中:
- 新加 username 字段,数据值从原 email 字段取
- 修改 age 字段变为原来的 age+1
- 新加 create_datetime 字段
- 新加 is_admin 字段,默认值为 False """
class Command(BaseCommand):
def handle(self, *args, **options):
kwargs = {
'mapping': {
'username': 'email',
'age': lambda obj: obj.age + 1,
'create_datetime': timezone.now()},
'defaults': {'is_admin': False}
'source_db': 'whistler'
}
st = SuperTube(LatencyUser, User, **kwargs)
st.run(stop_on_error=True)

迁移工具 SuperTube 和 TubeSet 更多说明和例子参考这个文档

一个为 latency 中的旧数据建表的例子:



class Order(models.Model):
sn = models.CharField(u'领用单编号', max_length=100)
created = models.DateTimeField(u'创建时间', auto_now_add=True)
apply_qty = models.IntegerField(u'计划领用数量', blank=True, null=True)
# TODO 1 将原 model 中的外键字段名改为 原字段名+_id ,类型改为 IntegerField
# batch = models.ForeignKey('stock.Batch', blank=True, null=True)
batch_id = models.IntegerField('stock.Batch', blank=True, null=True)
purpose = models.PositiveIntegerField(u'领用用途', choices=PURPOSES, blank=True, null=True)
# platform = models.ForeignKey('si.Platform', blank=True, null=True, related_name='+')
platform_id = models.IntegerField('si.Platform', blank=True, null=True) def __unicode__(self):
return self.sn class Meta:
verbose_name = u'Order'
# TODO 2 注释掉原表中的 unique_together
# unique_together = (
# ('platform', 'request_id'),
# ('platform', 'outer_id'),
# ) # TODO 3 managed 设为 False
managed = False
# TODO 4 指定 db table
db_table = 'cardbox_applyvoucher'

撸了个 django 数据迁移工具 django-supertube的更多相关文章

  1. Django数据导入

    从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1.7, Django 1. ...

  2. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  3. python学习笔记--Django入门三 Django 与数据库的交互:数据建模

    把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...

  4. Django 数据表更改

    Django 数据表更改 « Django 开发内容管理系统(第四天) Django 后台 » 我们设计数据库的时候,早期设计完后,后期会发现不完善,要对数据表进行更改,这时候就要用到本节的知识. D ...

  5. Django数据查询中对字段进行排序

    Django数据查询中对字段进行排序   第一种方法:使用order_by进行排序 Articlelist = Article.objects.filter(**kwargs).order_by('n ...

  6. 【原】Django数据Model层总结

    vlaues - 单条记录 - <class 'dict'> 多条记录 - <class 'django.db.models.query.QuerySet'> vlaues_l ...

  7. django学习-10.django连接mysql数据库和创建数据表

    1.django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django为这些数据库提供了统一的调用API. 我们可以根据自己 ...

  8. 2 django系列之django分页与templatetags

    preface 当页面出现的条目多的时候,我们就需要使用分页功能了.Django作为一个知名的web框架,自然也提供了分页功能,下面说说它. Python-shell 练练手 在python下入手 先 ...

  9. Django学习之django自带的contentType表 GenericRelation GenericForeignKey

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

随机推荐

  1. JSONCPP开发环境搭建

    环境设置 项目地址 https://github.com/open-source-parsers/jsoncpp.git 操作系统 64位 Fedora 24 安装jsoncpp $ git clon ...

  2. 「学习笔记」Fast Fourier Transform

    前言 快速傅里叶变换(\(\text{Fast Fourier Transform,FFT}\) )是一种能在\(O(n \log n)\)的时间内完成多项式乘法的算法,在\(OI\)中的应用很多,是 ...

  3. c++常考算法知识点汇总

    前言:写这篇博客完全是给自己当做笔记用的,考虑到自己的c++基础不是很踏实,只在大一学了一学期,c++的面向对象等更深的知识也一直没去学.就是想当遇到一些比较小的知识,切不值得用一整篇 博客去记述的时 ...

  4. linux的防火墙端口配置

    健忘啊,记下来吧 Red Hat Linux系统 此类型系统包括red hat的各类衍生及相关不版本,包括RHEL.CentOS.Fedora等等. 防火墙配置文件: /etc/sysconfig/i ...

  5. 解决LINUX下SQLPLUS时上下左右键乱码问题

    window下的sqlplus可以通过箭头键,来回看历史命令,用起来非常的方便. 但是在linux里就没有这么方面了,错了一个命令,我们必须重新敲一次,辛苦了手指头叻. 看到一个文章,很方便的一招,给 ...

  6. VS2017(Visual Studio2017) 搭建QT5开发环境

    VS创建QT工程并添加到GitHub中 大家好! 欢迎打开并阅读本文,这次咱们说说怎么在VS中创建一个QT项目并且放到GitHub中吧 因为GitHub或者码云Gitee都是一个很好的提供代码托管的地 ...

  7. 明天找python工作,看看这几道Python面试题吧,Python面试题No14

    第1题: 如何解决验证码的问题,用什么模块,听过哪些人工打码平台? PIL.pytesser.tesseract模块 平台的话有:(打码平台特殊,不保证时效性) 云打码 挣码 斐斐打码 若快打码 超级 ...

  8. [SCOI2007]修车 费用流 BZOJ 1070

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  9. HDU1272-小希迷宫

    题目链接:点击打开链接 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首 ...

  10. 忘记mysql数据库密码时进行修改方法

    长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件夹( ...