博客
关于我
利用 SQLAlchemy 实现轻量级数据库迁移
阅读量:686 次
发布时间:2019-03-17

本文共 1548 字,大约阅读时间需要 5 分钟。

本文介绍结合 python 的几个工具,实现轻量级的数据库迁移。

在日常工作中,可能需要将数据迁移到不同的数据库,可以考虑下面一些简单的办法:

  • kettle 的多表复制向导,之前写过一篇博文:
  • 使用 CSV 作为中介,需要花时间处理字段的数据类型
  • 利用 sqlalchemy,之前写过一篇博文:。博文的操作过程还是比较繁琐,需要手工维护字段的数据类型

假设我们现在需要把 sql server 中 emp_master 表的数据迁移到 sqlite 数据库的同名表中。迁移的过程分为两步:

  • 基于源数据库的表结构,在目标数据库中创建表
  • 利用 pandas 的 dataframe 将数据传输到目标数据库

创建数据库表schema

首先利用 sqlacodegen 工具,生成 sqlalchemy ORM 模型:

sqlacodegen mssql+pymssql://user:pwd@localhost:1433/testdb > models.py -- tables emp_master

生成如下的代码,起始代码可能有些差异,手工修改一下:

# models.pyfrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class EmpMaster(Base):    __tablename__ = 'emp_master'    EMP_ID = Column(Integer, primary_key=True)    GENDER = Column(String(10))    AGE = Column(Integer)    EMAIL = Column(String(50))    PHONE_NR = Column(String(20))    EDUCATION = Column(String(20))    MARITAL_STAT = Column(String(20))    NR_OF_CHILDREN = Column(Integer)

使用 sqlalchemy 在目标数据库中创建数据库和表:

# create_shcema.pyfrom sqlalchemy import create_enginefrom models import Baseengine = create_engine('sqlite:///employees.db')Base.metadata.create_all(engine)

利用 pandas dataframe 迁移数据

需要用到 read_sql() 方法读取数据到 dataframe,用到 dataframe 的 to_sql() 方法将数据发送的目标数据库:

# data_migrate.pyfrom sqlalchemy import create_engineimport pandas as pdsource_engine = create_engine('mssql+pymssql://user:pwd@localhost:1433/testdb')target_engine = create_engine('sqlite:///employees.db')df = pd.read_sql('emp_master', source_engine)df.to_sql('emp_master', target_engine, index=False, if_exists='replace')

转载地址:http://zjthz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(30)——MySQL 索引详解大全
查看>>
Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
查看>>
Mysql学习总结(33)——阿里云centos配置MySQL主从复制
查看>>
Mysql学习总结(37)——Mysql Limit 分页查询优化
查看>>
Mysql学习总结(38)——21条MySql性能优化经验
查看>>
Mysql学习总结(39)——49条MySql语句优化技巧
查看>>
Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
查看>>
Mysql学习总结(40)——MySql之Select用法汇总
查看>>
Mysql学习总结(41)——MySql数据库基本语句再体会
查看>>
Mysql学习总结(42)——MySql常用脚本大全
查看>>
Mysql学习总结(43)——MySQL主从复制详细配置
查看>>
Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
查看>>
Mysql学习总结(45)——Mysql视图和事务
查看>>
Mysql学习总结(46)——8种常被忽视的SQL错误用法
查看>>
Mysql学习总结(48)——MySql的日志与备份还原
查看>>
Mysql学习总结(49)——从开发规范、选型、拆分到减压
查看>>
Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(56)——MySQL用户管理和权限设置
查看>>
Mysql学习总结(58)——深入理解Mysql的四种隔离级别
查看>>
Mysql学习总结(59)——数据库分库分表策略总结
查看>>