不启动视图手动添加app到app栈
with app.app_context():
db.create_all()
不删除表直接更改表结构(如增加一列)
模型-》迁移文件-》表
* 采用db.create_all 在后期修改字段时,不会自动映射到数据库中,必须删除表,之后重新运行‘db.reate_all'才会重新映射,为此可使用flask-Migrate来解决这一问题。它可以在每次修改模型后,可将修改后的模型映射到数据库中。
* 使用flask-migrate必须借助flask-scripts.
* flask-migrate中包含了所有对数据库相关的命令。
- 安装:
pip install flask-migrate
- 使用:
1 from flask import Flask, url_for, redirect, render_template 2 import config 3 from db import db 4 from models import Article 5 6 app = Flask(__name__) 7 app.config.from_object(config) 8 # db = SQLAlchemy(app) 9 db.init_app(app) 10 11 @app.route('/') 12 def index(): 13 # return render_template('index.html') 14 return 'index' 15 16 if __name__ == '__main__': 17 app.run()
1 from flask_sqlalchemy import SQLAlchemy 2 db = SQLAlchemy()
1 from flask_script import Manager 2 from valuegood import app 3 from db import db 4 from flask_migrate import Migrate, MigrateCommand 5 from models import Article 6 7 manager = Manager(app) 8 9 # 1.要使用flask-migrate必须绑定app及db 10 migrate = Migrate(app, db) 11 # 2.把MigrateCommand添加到manager 12 manager.add_command('db', MigrateCommand) 13 14 15 if __name__ == '__main__': 16 manager.run()
1 from db import db 2 3 class Article(db.Model): 4 __tablename__ = 'article' 5 id = db.Column(db.Integer, primary_key=True, autoincrement=True) 6 title = db.Column(db.String(100), nullable=False) 7 content = db.Column(db.Text, nullable=False) 8 author_id = db.Column(db.Integer, nullable=False)
- 运行:
1.python manager.py db init
2.python manager.py db migrate
3.python manager.py db upgrade
* 当模型改变时,在cmd中重新运行2,3 即可。
* 在manager.py文件中必须把model中的模型导入:
from models import Article