falsk-模型基础
前面的学习中我们从创建flask项目开始、学习了路由、模版、请求响应、会话技术和模版语言,接下来就要学习模型了,也就是数据、怎么和数据库交互链接等。
1、安装跟数据库相关的插件
(1)安装flask_sqlalchemy(用于ORM)
Flask
中一般使用flask-sqlalchemy来操作数据库。
SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
SQLAlchemy是一个关系型数据库框架,支持多种数据库后台。它提供了高层的 ORM 和底层的原生数据库的操作。
pip install Flask-SQLAlchemy
(2)安装flask-migrate(用于数据迁移)
Flask-Migrate 是 Flask 的一个扩展,它集成了 Alembic 到 Flask 应用中。它用于管理数据库迁移。
安装 Flask-Migrate 的方法很简单,通过 pip 安装即可:
pip install Flask-Migrate
(3)安装pymysql(MySQL驱动)
pip install pymysql
2、导入插件、初始化、链接数据库
我们创建一个项目叫做“FlaskPro1_模型基础”,根据以前学习的内容,确保项目运行正常。
(1)在项目中我们创建一个叫做exts.py的文件专门来管理插件,然后在里面导入、初始化插件,代码如下:
# exts.py:插件管理
# 扩展的第三方插件
# 1.导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# 2. 初始化
db = SQLAlchemy() # ORM
migrate = Migrate() # 数据迁移
#下面这个操作我们写一个init_exts的方法,待会传进来app,然后插件和app做绑定
# 3. 和app对象绑定
def init_exts(app):
db.init_app(app=app)
migrate.init_app(app=app, db=db)
(2)上面完成了插件的引入、初始化,接下来在__init__.py文件中,配置数据库同时调用刚才创建的exts.py文件里的init_exts方法,插件和app对象的绑定。
# __init__.py :初始化文件,创建Flask应用
from flask import Flask
from .views import blue
from .exts import init_exts
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
# 配置数据库
db_uri = 'sqlite:///sqlite3.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 禁止对象追踪修改
# 初始化插件
init_exts(app=app)
return app
(3)创建数据库(新建模型)
上面完成了插件导入、初始化以及配置工作,接下来创建模型,模型Model其实是一个db.Model的类,下面我们创建一个User表(必须继承 db.Model),代码如下,注意代码中的注视,注释详细解释了每个语句的含义。
# models.py : 模型,数据库
from .exts import db
# 模型 数据库
# 类 ==> 表结构
# 类属性 ==> 表字段
# 一个对象 ==> 表的一行数据
# 模型Model:类
# 必须继承 db.Model
class User(db.Model):
# 表名
__tablename__ = 'tb_user'
# 定义表字段
#创建一个id字段,int类型,作为主键、自增
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(30), unique=True, index=True)
age = db.Column(db.Integer, default=1)
sex = db.Column(db.Boolean, default=True)
salary = db.Column(db.Float, default=100000, nullable=False)
salary2 = db.Column(db.Float, default=100000, nullable=False)
# db.Column : 表示字段
# db.Integer:表示整数
# primary_key=True : 主键
# autoincrement=True : 自动递增
# db.String(30): varchar(30) 可变字符串
# unique=True : 唯一约束
# index=True : 普通索引
# default=1 : 默认值
# nullable=False : 是否允许为空
3、数据迁移
为什么要做数据迁移?
其实我们上面完成的只是模型的创建,那我们就需要把模型迁移到数据库,真正的生成数据库,然后数据库中生成我们模型中创建的表。
数据迁移的详细步骤(下面这些步骤也是我们刚才完成的,下面我们回顾一下)
(1)安装好数据迁移的包flask_sqlalchemy和flask-migrate
(2)在exts.py中初始化migrate和sqlalchemy
(3)在models中定义好模型
(4)在views.py中一定要导入models模块from .models import *
(5)配置好数据库(sqlite3或者MySQL)
上面的步骤我们已经完成了,接下来开始第6项,执行数据迁移的命令
(6)执行数据迁移命令(终端进入app.py所在的目录,然后输入以下终端命令)
-
flask db init 创建迁移文件夹migrates,只调用一次
这里面执行之后会在目录中生成migrations文件夹,结构如下
注意:init操作执行一次就可以
-
flask db migrate 生成迁移文件
这个操作完成之后就会生成迁移文件,也就是migrations/versions中的文件
-
flask db upgrade 执行迁移文件中的升级
执行完之后真正实现了数据的迁移,
此时再到创建的数据库中查看就发现多了我们模型中创建的表以及表字段,
注意:假如模型中有数据的改动,比如迁移好后我又在模型里创建的表中增加了一个字段,
那就必须要重新迁移,也就是重新执行flask db migrate和flask db upgrade,这两个执行完
才完成了数据的迁移同步
-
flask db downgrade执行迁移文件中的降级
这个类似是回退,比如上面表中增加了一个字段后发现后悔了,但是已经完成了数据的
迁移,这个时候可以执行 flask db downgrade,实现回退的逻辑
数据迁移完成后实际上就完成了数据库以及表的创建,接下来就可以从模型中存取数据了