sqlalchemy + alembic数据迁移
时间:2022-03-15 15:13
需要安装的包工具
- 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)的表会被删除