sqlalchemy + alembic数据迁移

Posted ivy-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlalchemy + alembic数据迁移相关的知识,希望对你有一定的参考价值。

需要安装的包工具


 

  • pip install pymysql
  • pip install sqlalchemy
  • pip install alembic

 

创建表

 


  • 新建models.py
 1 from sqlalchemy import create_engine
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy import Column, Integer, String
 4 
 5 DATABASE = 
 6     HOST: localhost,
 7     USERNAME: root,
 8     PASSWORD: qwe123,
 9     PORT: 3306,
10     DATABASE: test,
11     PARAMS: utf8
12 
13 
14 mysql_URL = mysql+pymysql://USERNAME:PASSWORD@HOST:PORT/DATABASE?PARAMS
15 
16 engine = create_engine(MYSQL_URL.format(**DATABASE))
17 
18 Base = declarative_base(engine)
19 
20 
21 class Test(Base):
22     __tablename__ = test
23     id = Column(Integer, autoincrement=True, primary_key=True)
24     name = Column(String(20))
25     # password = Column(String(30))
26 
27 
28 if __name__ == __main__:
29     Base.metadata.create_all()

 

alembic 初始化和配置


  • 在项目的根目录下:

    • alembic init alembic
  • 执行完命令之后会在项目的目录下生成如下目录
  • 技术图片
  • 修改alembic.ini 文件
  • 技术图片

    该配置等于model.py里面的mysql_url格式化后的结果(后面的参数去掉)

  • 修改env.py
  • 技术图片

    在 env.py 中设置,将target_metadata赋值成数据库的元数据(metadata)
    如果执行 revision 有 import 报错,注意是否正确将当前项目目录添加到 sys.path 路径

  

迁移表


  •  将models.py中的password的注释消除
  • 执行alembic revision --autogenerate -m "add password"
  • 执行alembic upgrade head
  • 再去数据库查看,新的表的字段已经被加上了
  • alembic在windows下会有些异常
  • alembic迁移数据表时,不是项目的数据表(没有继承Base)的表会被删除

 

以上是关于sqlalchemy + alembic数据迁移的主要内容,如果未能解决你的问题,请参考以下文章

Six——tornado操作之用户表单(密码,用户名)数据库迁移使用SQLAlchemy+pymysql配合alembic实现!

四十七:数据库之alembic数据库迁移工具的基本使用

关系型数据库版本控制之(Flask SQLalchemy Alembic )

使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化

使用 SQLAlchemy 管理数据库迁移的方法? [关闭]

四十九:数据库之Flask-SQLAlchemy下alembic的配置