flask四:models

1.示例:flask_sqlalchemy ORM插件

在app属性中配置数据库,懒加载:

# application/models.py
from flask_sqlalchemy import SQLAlchemy

models = SQLAlchemy()


def init_model(app):
    models.init_app(app)


class User(models.Model):
    id = models.Column(models.Integer, primary_key=True)
    username = models.Column(models.String)

 app初始化时,加载数据库配置,使配置生效:

# application/__init__.py
from flask import Flask
from application.views import init_view
from application.models_ext import init_model


def create_app():
    app = Flask(__name__)

    # uri: 数据库+驱动://用户明:密码@主机:端口/具体的数据库名称
    app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////Users/**/stpy/flask_st/application/flask_test.db"
    # app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@localhost:3306/flask_test.db"
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    init_model(app)

    init_view(app)

    return app

 

创建表: models.create_all()

# 定义模型,application/models.py

 


# 执行models.create_all(),application/views/first_views.py
from flask import Blueprint
from flask import render_template
from application.models import models

first_blue = Blueprint('first_blue', __name__)


@first_blue.route("/")
def index():
    # return "这是首页"
    return render_template('index.html', msg="首页参数")


@first_blue.route("/createdb/")
def createdb():
    models.create_all()
    return "create db success"

 

http://127.0.0.1:5000/createdb/

添加用户:

@first_blue.route("/adduser/")
def add_user():
    user = User()
    user.username = 'jerry'
    user.save()
    return "add user success"

 

删除所有表:

@first_blue.route("/dropdb/")
def dropdb():
    models.drop_all()
    return "delete db success"

 

示例2: migrations文件

如果要修改表结构,像django一样,需要migrations文件。引入flask-migrate插件: pip install flask-migrate

flask-migrate,结合flask-script,添加python manage.py db命令

# 修改application/models_ext.py

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

models = SQLAlchemy()

migrate = Migrate()


def init_model(app):
    models.init_app(app)
    migrate.init_app(app, models)


# 修改manage.py
import os

from flask_script import Manager
from application import create_app
from flask_migrate import MigrateCommand

env = os.environ.get("FLASK_ENV", "develop")

app = create_app(env)

manager = Manager(app)

manager.add_command('db', MigrateCommand)


if __name__ == '__main__':
    manager.run()

 

命令:

初始化(首次): python manage.py db init

生成迁移文件:python manage.py db migrate

更新到数据库:python manage.py db upgrade

 

posted on 2020-06-18 23:12  myworldworld  阅读(224)  评论(0)    收藏  举报

导航