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) 收藏 举报