sqlalchemy数据迁移

sqlalchemy笔记:

内容:使用Alembic迁移数据库

Alembic简介:

SQLAlchemy是一款非常优秀的ORM框架,但是本身没有带数据库版本控制功能,这很不方便,进行开发过程中难免修改数据模型,添加一个表,修改一个字段,都需要手动修改的话就比较费事了,还不如不用SQLAlchemy呢。
在这里介绍一款SQLAlchemy作者写的数据库版本控制工具---Alembic。另外还有一个工具叫做SQLAlchemy-Migrate,在使用过程中感觉Alembic更为灵活。

1. alembic安装

pip install alembic

2. alembic初始化

使用之前,先在项目根目录进行初始化。初始化完成后,会生成一个alembic.ini配置文件及一个alembic目录。

alembic init alembic
alembic init YOUR_ALEMBIC_DIR

3. 模块包目录下创建目录alembic_database,

目录结构如下:

myproject/
|--index.wsgi
|--...
|--myapp/
   |--__init__.py
   |--...
   |--alembic.ini            # 配置文件
   |--alembic_database/
      |--env.py              # 运行alembic会加载该模块
      |--script.py.mako      # 迁移脚本生成模板
      |--...
      |--versions/           # 存放迁移脚本,类似历史库

4. 创建模型类

创建一个使用SQLAlchemy定义数据库的模块。

5. 修改配置文件

(1)、在alembic.ini中设置数据库连接。

sqlalchemy.url = driver://user:pass@localhost/dbname

(2).、为了使用模型类更新数据库,需要在env.py中设置,将target_metadata赋值成数据库的元数据(metadata)。原有配置如下


# 修改:
target_metadata=None
# 修改为:
# 方式1:
import os
import sys
root = os.path.dirname(__file__)+'/../../' # 定位到project根目录
print root
sys.path.append(root)
from myapp import db
target_metadata = db.metadata

# 方式2:
import sys                                             
from os.path import abspath, dirname                   
sys.path.append(dirname(dirname(abspath(__file__))))   
from modules.models import Base                        
target_metadata = Base.metadata

6. 创建数据迁移版本

用 alembic revision -m+注释 创建数据库版本。由于我提供了模型类,所以可以用–autogenerate参数自动生成迁移脚本。运行(准备工作:配置alembic环境变量,cmd在项目目录下运行如下命令)。

alembic revision –autogenerate -m”create_user_table”

两个函数用于数据库的升级和降级。

7. 更新数据库

升级数据库使用alembic upgrade,降级使用alembic downgrade。更新到最新版。

alembic upgrade head

alembic更新操作命令

更新数据库

alembic upgrade 版本号

更新到最新版

alembic upgrade head

降级数据库

alembic downgrade 版本号

离线更新(生成sql)

alembic upgrade 版本号 –sql > migration.sql

从特定起始版本生成sql

alembic upgrade 版本一:版本二 –sql > migration.sql

参考文献

  1. https://www.cnblogs.com/mrchige/p/6389588.html
  2. https://www.cnblogs.com/pycode/p/mysql-orm.html
  3. http://blog.csdn.net/Lotfee/article/details/57406450
  4. http://www.pythondoc.com/flask-sqlalchemy/quickstart.html

你可能感兴趣的:(python)