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
项目代码的入口,完成主要的配置和开始运行。
-
#app.py
-
from flask import Flask
-
from ext import db
-
import config
-
#目的:练习Flask-Migrate模块的使用
-
#安装依赖: pip install flask-migrate
-
#其他依赖:
-
#pip install pymysql
-
#pip install SQLAlchemy
-
#pip install flask-sqlalchemy
-
#pip install flask-script
-
-
#迁移命令
-
# 1.python manage.py db init
-
# 2.python manage.py db migrate
-
# 3.python manage.py db upgrade
-
-
def create_app():
-
app = Flask(__name__)
-
app.config.from_object(config) #载入config.py中的配置信息
-
-
db.init_app(app) # app绑定数据库db
-
-
return app
-
-
-
if __name__ == '__main__':
-
app = create_app()
-
app.run()
2.ext.py
为了避免一些外部模块和app.py之间的循环引用,对此将数据库db的声明单独放置一个文件中。
-
#ext.py
-
from flask_sqlalchemy import SQLAlchemy
-
-
db = SQLAlchemy() #创建一个数据库引擎
3.config.py
用来存放一些全局的配置信息,一般是非常非常重要的配置信息。
-
#数据库配置信息
-
HOSTNAME = '127.0.0.1'
-
PORT = '3306'
-
DATABASE = 'mydb'
-
USERNAME = 'root'
-
PASSWORD = 'wangjian'
-
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
-
-
SQLALCHEMY_DATABASE_URI = DB_URI
-
SQLALCHEMY_TRACK_MODIFICATIONS = True
4.models.py
用来构造ORM模型,这个是对数据库表格的映射。后面迁移过程会使用到。
-
# models.py
-
from ext import db
-
-
#创建ORM模型类
-
class User(db.Model):
-
id = db.Column(db.Integer, primary_key=True)
-
username = db.Column(db.String(50))
-
addresses = db.relationship('Address', backref='user')
-
-
def __init__(self, username):
-
self.username = username
-
-
-
class Address(db.Model):
-
id = db.Column(db.Integer, primary_key=True)
-
email_address = db.Column(db.String(50))
-
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
-
-
def __init__(self, email_address):
-
self.email_address = email_address
5.manage.py
本文的重点,将flask-migrate迁移的操作以脚本命令的形式添加到`db`这个子集
-
# manage.py
-
#将迁移相关的命令集添加到脚本命令中
-
-
from flask_migrate import Migrate, MigrateCommand
-
from ext import db
-
from flask_script import Manager
-
from app import create_app
-
import models #导入你想要迁移的数据表的ORM类
-
-
app = create_app() #实例化一个app对象
-
-
manager = Manager(app) #实例化一个manager对象
-
-
Migrate(app,db) #绑定 数据库与app,建立关系
-
-
manager.add_command('db',MigrateCommand) #添加迁移命令集 到脚本命令
-
-
-
#如果是以此脚本作为主脚本程序,就执行
-
if __name__ == '__main__':
-
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
- 点赞
- 收藏
- 关注作者
评论(0)