一、所需要安装的第三方包
flask-script
pymysql 数据库
flask-sqlalchemy 实现ORM映射
flask-migrate 发布命令工具
二、项目settings文件配置
class Config:
DEBUG = True
# mysql+pymysql(驱动)://用户名:密码@ip地址:port/数据库名
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:admin@127.0.0.1:3306/flask_test'
SQLALCHEMY_TRACK_MODIFICATIONS = False # Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。
SQLALCHEMY_ECHO = True # 如果设置为 Ture , SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。
class DevelopmentConfig(Config): #开发版本
ENV = 'development'
class ProductionConfig(Config): #生产版本
ENV = 'production'
DDEBUG = False
三、创建模型
from datetime import datetime
from ext import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
userName = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(15), nullable=False)
phone = db.Column(db.String(11), unique=True) #unique设置不能重复
createTime = db.Column(db.DateTime, default=datetime.now)
def __str__(self):
return self.userName + "===" + self.password
def __repr__(self):
self.__str__()
四、模型创建完后,一定要记得在app.py中导入这个模型,否则,数据库不能迁移
from apps import create_app
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from ext import db
import apps.user.models
app = create_app()
manager = Manager(app=app)
# 命令工具
migrate = Migrate(app=app, db=db) # 作用: 影响数据库的映射
manager.add_command('db', MigrateCommand) # 作用: 将命令交给manager管理, 和 @manager.command作用类似
# @manager.command
# def init():
# print('初始化')
if __name__ == '__main__':
manager.run() # python app.py runserver -h 0.0.0.0 -p 8000 # -p -h 可选,设置ip和端口
五、数据库迁移
python app.py db init 生成migrations文件夹
python app.py db migrate 执行迁移,产生一个版本文件
python app.py db upgrade 同步到数据库中,生成模型对应的表
六、如果后期修改模型或增加模型,只需要执行下面两个命令,不用再执行init,init只执行一次
python app.py db migrate
python app.py db upgrade
七、降级数据库版本
python app.py db downgrade #会降低数据库版本,并删除对应的表