1.配置数据库
__init__.py
#__init__.py: 初始化文件、用来创建flask应用
from flask import Flask
from .views import blue #蓝图
from .exts import init_exts #导入插件模块 exts.py
def create_app():
app = Flask(__name__) #创建flask应用
#注册蓝图
app.register_blueprint(blueprint=blue)
# 配置数据库
db_uri = 'sqlite:///sqlite3.db' #数据库路径,自动会创建数据库文件sqlite3.db
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri #配置数据库连接的路径
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #关闭追踪数据库的修改
# 初始化插件 exts.py
init_exts(app=app)
return app
2.配置第三方插件
在
App
目录下创建exts.py
文件
# exts.py :插件管理
# 扩展的第三方插件
# 1. 导入
from flask_sqlalchemy import SQLAlchemy #做ORM关系的映射
from flask_migrate import Migrate #做数据迁移
#2. 初始化插件
db = SQLAlchemy() #ORM
migrate = Migrate() #数据迁移
# 3.和app对象绑定
def init_exts(app):
db.init_app(app)
migrate.init_app(app,db)
3.模型models.py
# 模型数据库
from .exts import db #导入db对象
# 模型 对应数据库中的 数据库
# 类 表结构
# 类属性 表字段
# 对象 表的一行数据
# 模型: 类名
# 必须继承:db.Model 才是 一个模型
class User(db.Model):
# 表名
__tablename__ = 'tb_user'
# 字段
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), unique=True, index=True)
age = db.Column(db.Integer, default=1)
sex = db.Column(db.Boolean, default=True)
salary = db.Column(db.Float, default=10000, nullable=False)
# db.Column :表示字段
# db.Integer :表示字段的类型 整数类型
# primary_key=true : 表示主键
# autoincrement=true : 表示自增
# db.String(50) : 表示字段的长度 相当于varchar(50)
# index=True : 表示创建索引
# db.Boolean : 表示布尔类型
# default=1 : 表示默认值
# db.Float : 表示浮点类型
# nullable=False : 表示不能为空
- 模型创建好后就要执行数据迁移
注意:
要确保已安装:Flask-Migrate
确保已在__init__.py中配置好数据库
在views.py中导入models模块:from .models import *
要在项目的根目录下
- 执行以下命令:
#1.先创建迁移文件夹、该命令只需执行一次即可
#执行后会生成`instance`和migrations 两个目录
$ flask db init
#2. 生成迁移文件
# 会去找继承 db.Model 的类,执行类中的内容
# 如果不是继承 db.Model 的话就无法执行生成迁移文件
# 会在 instance 下生成 sqlite3.db 数据库文件(在__init__.py中配置数据库时定义的变量名)
# 会在 migrations/versions 下生成xxxx.py 迁移文件
$ flask db migrate
#3.执行迁移文件中的升级
# 将数据结构变为最新的迁移文件 xxxx.py 中的语句执行 创建表的操作
$ flask db upgrade
#4.执行迁移文件中的降级(没必要不需要执行)
# 撤销上一步的升级 - 就是回退到上一个迁移文件(xxx.py)中的数据结构
flask db downgrade
- 注意:如果models.py中模型变化了(如新增字段货表结构修改),都需要重新做数据迁移-第2步,和数据升级-第3步-(flask db init 不需要再执行)