Flask_migrate最新攻略,教你怎么优雅的使用Flask_migrate

Flask_migrate在网上有很多用例,基本都是demo级别,告诉你怎么用就可以了,但是很多用例都已经过时了,比如还用到MigrateCommand,而你如果一不小心,直接install了最新版的Flask_migrate的话,你在搜索了一番之后会发现,你需要对Flask_migrate降级,才能正常的跑通那些demo,但是降级的同时可能又会引发你其他版本的不兼容,报出一些奇奇怪怪的错误,因此,在我踩了许多坑之后,双手奉上这一最新版本的使用教程,帮助大家少走弯路,一键直达。

官方文档看这里

首先,仔细阅读官方教程,试用官方教程,非常简单的一个用例,你可以轻松的跑通。但是,不好意思,这个用例让我很不舒服的一点,就是他必须在app.py下才能被检测到,正常的执行,这对我们写项目的人来说,是不能忍受的,我不可能把model的代码一股脑全放在app上面,如果这样,让我的代码情何以堪,一点都不优雅。但是可惜的是,官方仅仅提供了最简单的demo,并没有告诉我们,如何才能解耦开来。那么,下面,我将向大家展示如何优雅的解耦。

这是我的项目结构,可以看到,我把model抽了出来。

__init__.py文件代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://' + DB_USER + ':' + DB_PASSWORD + '@' + DB_HOST + '/' + DB_DB
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI

db = SQLAlchemy(app)
Migrate(app, db)

from model.user import User

user.py 文件代码

from model import db


class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(250),  unique=True, nullable=False)
    username = db.Column(db.String(250),  unique=True, nullable=False)
    password = db.Column(db.String(250), nullable=False)
    login_time = db.Column(db.Integer)

    def __init__(self, username, password, email):
        self.username = username
        self.password = password
        self.email = email

    def __str__(self):
        return "Users(id='%s')" % self.id

app.py文件代码

# This is app.py, this is the main file called.
from model import app
from flask import render_template


@app.route('/')
def index():
    return 'Hello World'


if __name__ == '__main__':
    app.run(debug=True)

聪明的朋友应该发现我怎么做的了, 是的,我在__init__最后一行,引入了user类,达到了跟官方demo一样的效果,同时在app里面不再创建flask(),直接引入model里面创建的app,这样,本质上还是在app.py里面,但是形式上,已经实现了解耦.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值