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)的表会被删除

 

posted @ 2019-08-08 23:15  Ivy丶  阅读(509)  评论(0编辑  收藏  举报