1.首先要安装flask_migrate这个包,注:新版本只需这个即可,而旧版本需要导入三个包
python
#############旧版本###################
from info import create_app, db,models
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = create_app('develop')
# 创建manager对象,管理app
manager = Manager(app)
# 使用Migrate关联app,db
Migrate(app,db)
# 给manager添加一条操作命令
manager.add_command('db',MigrateCommand)
# 更改入口文件启动命令
if __name__ == '__main__':
manager.run()
#############新版本###################
from info import create_app, db,models
from flask_migrate import Migrate
app = create_app('develop')
# 创建Migrate实例
migrate = Migrate(app, db)
if __name__ == '__main__':
app.run()
2.数据库的配置
---在models.py中
python
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from info import constants
# 这里需要引入db
from . import db
class BaseModel(object):
"""模型基类,为每个模型补充创建时间与更新时间"""
create_time = db.Column(db.DateTime, default=datetime.now) # 记录的创建时间
update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间
。。。。。。。
---在项目包init.py文件config中
python
import logging
from logging.handlers import RotatingFileHandler
from flask_wtf.csrf import CSRFProtect
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session
from config import config_dict
# 定义redis_store变量
redis_store = None
# 1. 定义db的变量<---------------------
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
# 获取config配置
config = config_dict.get(config_name)
# 调用日志方法,记录程序运行信息
log_file(config.LEVEL_NAME)
app.config.from_object(config)
# 2.创建数据库关联对象并关联app
db.init_app(app)<---------------------
# 创建redis对象
# 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
# 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
# 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
global redis_store # global将局部变量声明为全局变量
redis_store = StrictRedis(host=config.REDIS_HOST, port=config.REDIS_PORT, decode_responses=True)
# 创建session对象
Session(app)
# 使用CSRFProtect保护app
CSRFProtect(app)
# 注册蓝图
from info.modules.index import index_blue
app.register_blueprint(index_blue)
return app
---在项目启动文件中app.py中;注:这里的启动文件最好叫做app.py而不是叫manage.py否则会报错,且记得引入models,让系统知道models的存在从而能够迁移成功!
python
from info import create_app, db,models #<---------
from flask_migrate import Migrate
app = create_app('develop')
# 创建Migrate实例
migrate = Migrate(app, db)
if __name__ == '__main__':
app.run()
---执行迁移命令
python
flask db init # 只需执行一次即可
flask db migrate
flask db upgrade
# 如果记不住后面两个命令 则可以使用 flask db --help进行查看