一,首先我们要安装flask扩展
pip install Flask-Script
我们就可以这样写代码
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
# 用Manager管理app对象
manager = Manager(app)
@app.route('/')
def index():
return 'index page'
if __name__ == '__main__':
# 用manager对象运行
manager.run()
这样我们就可以想Django一样启动Flask的服务器:
python script_flask.py(文件的名字) runserver
如果想运行到其他IP和Port上:
python demo.py runserver -h 0.0.0.0 -p 5000 -d # -d表示debug
还可以进入shell环境:
python demo.py shell # 进入交互式python环境,并且自动导入demo.py中的内容。
迁移操作
为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。
pip install flask-migrate
进行配置,导入我们需要的包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 通过脚本管理flask程序
manager = Manager(app)
# 设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/db_flask'
# 设置每次请求结束后会自动提交数据库中的改动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
# 数据库和模型类同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
# 创建数据库迁移对象
Migrate(app, db)
# 向脚步管理添加数据库迁移命令 db指命令的别名
manager.add_command('db', MigrateCommand)
# 类型
class Type(db.Model):
# 表名
__tablename__ = 'tbl_types'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(32), unique=True) # 名字
# 数据库中不存在的字段,只是为了查找和反向查找。
# backref:在关系的另一模型中添加反向引用
heros = db.relationship("Hero", backref='type')
def __repr__(self):
return self.name
# 英雄
class Hero(db.Model):
# 表名
__tablename__ = 'tbl_heros'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(64), unique=True) # 名字
gender = db.Column(db.String(64)) # 性别
# 外键 一个射手对应很多英雄
type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id"))
def __repr__(self):
return self.name
if __name__ == '__main__':
# 0.0.0.0代表任何能代表这台机器的地址都可以访问
# app.run(host='0.0.0.0', port=5000) # 运行程序
manager.run()
首先我们通过命令创建出migrations文件夹,后面所有的迁移文件都会放在这个文件夹里面,只有第一次才执行这句话
python flask_migrate_db.py db init
生成迁移文件
下面这条命令跟我们Django里面的makemigrations一样,是生成迁移文件的作用。因为我们的模型类并没有添加或删除字段,所有第一次会出现没有改变的提示。
-m:给迁移文件加上注释
python flask_migrate_db.py(文件名) db migrate -m 'first create'
添加新字段
我们在英雄里面添加一个年龄字段,再迁移一下:
age = db.Column(db.Integer) # 年龄
更新操作
python3 flask_migrate_db.py(文件名) db upgrade
降级
python3 flask_migrate_db.py db history
python3 flask_migrate_db.py db downgrade 4cee71e47df3
如果想降到最底层
python3 flask_migrate_db.py db downgrade base