本文共 1548 字,大约阅读时间需要 5 分钟。
本文介绍结合 python 的几个工具,实现轻量级的数据库迁移。
在日常工作中,可能需要将数据迁移到不同的数据库,可以考虑下面一些简单的办法:
假设我们现在需要把 sql server 中 emp_master 表的数据迁移到 sqlite 数据库的同名表中。迁移的过程分为两步:
首先利用 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)
需要用到 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/