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实现!
关系型数据库版本控制之(Flask SQLalchemy Alembic )
使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化