Flask-Migrate模块使用

举报
王建峰 发表于 2021/11/19 01:00:14 2021/11/19
【摘要】 flask-migrate可以十分方便的进行数据库的迁移与映射,将我们修改过的ORM模型映射到数据库中。另外flask-migrate是对Alembic的一个封装,其实它的底层是交由Alembic来处理的。使用起来十分方便。 在flask项目中使用flask-migrate,我采用下面的结构。   目录结构 . |...

flask-migrate可以十分方便的进行数据库的迁移与映射,将我们修改过的ORM模型映射到数据库中。另外flask-migrate是对Alembic的一个封装,其实它的底层是交由Alembic来处理的。使用起来十分方便。

在flask项目中使用flask-migrate,我采用下面的结构。

 

目录结构

.
|-- app.py     入口程序
|-- config.py  全局配置
|-- ext.py      对数据库的声明单独放在一个文件
|-- manage.py    迁移脚本
|-- migrations     执行迁移过程,产生的映射文件(不必关心)
|-- models.py     ORM模型构造
|-- static             ....
|-- templates      ......
`-- venv             虚拟环境(不必关心)

 

 

代码组织详解

1.app.py

项目代码的入口,完成主要的配置和开始运行。


  
  1. #app.py
  2. from flask import Flask
  3. from ext import db
  4. import config
  5. #目的:练习Flask-Migrate模块的使用
  6. #安装依赖: pip install flask-migrate
  7. #其他依赖:
  8. #pip install pymysql
  9. #pip install SQLAlchemy
  10. #pip install flask-sqlalchemy
  11. #pip install flask-script
  12. #迁移命令
  13. # 1.python manage.py db init
  14. # 2.python manage.py db migrate
  15. # 3.python manage.py db upgrade
  16. def create_app():
  17. app = Flask(__name__)
  18. app.config.from_object(config) #载入config.py中的配置信息
  19. db.init_app(app) # app绑定数据库db
  20. return app
  21. if __name__ == '__main__':
  22. app = create_app()
  23. app.run()

 

2.ext.py

为了避免一些外部模块和app.py之间的循环引用,对此将数据库db的声明单独放置一个文件中。


  
  1. #ext.py
  2. from flask_sqlalchemy import SQLAlchemy
  3. db = SQLAlchemy() #创建一个数据库引擎

 

3.config.py

用来存放一些全局的配置信息,一般是非常非常重要的配置信息。


  
  1. #数据库配置信息
  2. HOSTNAME = '127.0.0.1'
  3. PORT = '3306'
  4. DATABASE = 'mydb'
  5. USERNAME = 'root'
  6. PASSWORD = 'wangjian'
  7. DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
  8. SQLALCHEMY_DATABASE_URI = DB_URI
  9. SQLALCHEMY_TRACK_MODIFICATIONS = True

 

4.models.py

用来构造ORM模型,这个是对数据库表格的映射。后面迁移过程会使用到。


  
  1. # models.py
  2. from ext import db
  3. #创建ORM模型类
  4. class User(db.Model):
  5. id = db.Column(db.Integer, primary_key=True)
  6. username = db.Column(db.String(50))
  7. addresses = db.relationship('Address', backref='user')
  8. def __init__(self, username):
  9. self.username = username
  10. class Address(db.Model):
  11. id = db.Column(db.Integer, primary_key=True)
  12. email_address = db.Column(db.String(50))
  13. user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
  14. def __init__(self, email_address):
  15. self.email_address = email_address

 

5.manage.py

本文的重点,将flask-migrate迁移的操作以脚本命令的形式添加到`db`这个子集


  
  1. # manage.py
  2. #将迁移相关的命令集添加到脚本命令中
  3. from flask_migrate import Migrate, MigrateCommand
  4. from ext import db
  5. from flask_script import Manager
  6. from app import create_app
  7. import models #导入你想要迁移的数据表的ORM类
  8. app = create_app() #实例化一个app对象
  9. manager = Manager(app) #实例化一个manager对象
  10. Migrate(app,db) #绑定 数据库与app,建立关系
  11. manager.add_command('db',MigrateCommand) #添加迁移命令集 到脚本命令
  12. #如果是以此脚本作为主脚本程序,就执行
  13. if __name__ == '__main__':
  14. manager.run()

 

迁移动作

在项目目录下,进入控制台输入命令


1.初始化迁移文件

python manage.py db init
 


2.将模型添加到迁移文件

python manage.py db migrate
 


3.迁移文件中的模型映射到数据库中

python manage.py db upgrade
 

 

观察数据库

sucess!!

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/86592319

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。