Flask高级应用05---模型和数据迁移

新建项目做好基础配置

一、Flask模型简介

Flask默认并没有提供任何数据库操作的API

我们可以选择任何适合自己项目的数据库来使用

Flask中可以自己的选择数据,用原生语句实现功能,也可以选择ORM(SQLAlchemy,MongoEngine)

SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。

ORM:

将对对象的操作转换为原生SQL
优点
	易用性,可以有效减少重复SQL
	性能损耗少
	设计灵活,可以轻松实现复杂查询
	移植性好

针对于Flask的支持,官网地址

pip install flask-sqlalchemy

安装驱动

pip install pymysql

二、定义模型

使用SQLALchemy的对象去创建字段

其中__tablename__指定创建的数据库的名称

创建models.py文件,其中定义模型

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Student(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    s_name = db.Column(db.String(10),unique=False,nullable=False)
    s_age = db.Column(db.Integer,default=19)

    __tablename__ = 'student'

2.字段类型

Integer表示创建的s_id字段的类型为整形,

primary_key表示是否为主键

String表示该字段为字符串

unique表示该字段唯一

default表示默认值

autoincrement表示是否自增


3.别名:

__tablename__ = 'student'

三、关联数据库

在manage.py中添加数据库配置,

1.初始化SQLALchemy

在定义的__init__.py文件中使用SQLALchemy去整合一个或多个Flask的应用

有两种方式:

第一种:

from flask_sqlalchemy import SQLALchemy

app = Flask(__name__)
db = SQLAlchemy(app)

第二种:

from App.models import db

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

2.配置数据库的访问地址

数据库连接的格式:

dialect+driver://username:password@host:port/database

dialect数据库实现

driver数据库的驱动

【例】: 访问mysql数据库,驱动为pymysql,用户为root,密码为123456,数据库的地址为本地,端口为3306,数据库名称HelloFlask

设置如下: “mysql+pymysql://root:123456@localhost:3306/HelloFlask”

在初始化__init__.py文件中如下配置:

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@localhost:3306/HelloFlask"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

【例】

# 数据库的配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/flask5'    #用户名root,密码123456,表名flask5
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#初始化数据库
db.init_app(app)

注意:在迁移前首先要开启数据库mysql

3.创建模型==create_all()

对创建的模型数据进行迁移,这个方法只能用于首次创建,后面迁移需要用migrate(不建议用),建议用sql语句,orm实现的数据库迁移不是最优方式

@blue.route('create_db/')     #设置路由信息
def create_db():               
    db.create_all()			#调用flask方法
    return '创建成功'         

运行项目,浏览器中显示创建成功后,查看数据库可以看到此时生成刚创建的学生表

mysql> show tables;
+------------------+
| Tables_in_flask5 |
+------------------+
| student          |

四、数据库的migrate迁移(不推荐)

在django中继承了makemigrations,可以通过migrate操作去更新数据库,修改我们定义的models,然后在将模型映射到数据库中。

在flask中也有migrate操作,它能跟踪模型的变化,并将变化映射到数据库中

1、安装migrate

pip install flask-migrate

2、 配置使用migrate

(1)初始化,使用app和db进行migrate对象的初始化
from flask_migrate import Migrate

#绑定app和数据库
Migrate(app=app, db=db)
(2) 安装了flask-script的话,可以在Manager()对象上添加迁移指令
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)

manage = Manager(app=app)

manage.add_command('db', MigrateCommand)

操作:

python manage.py db init  初始化出migrations的文件,只调用一次

python manage.py db migrate  生成迁移文件

python manage.py db upgrade 执行迁移文件中的升级

python manage.py db downgrade 执行迁移文件中的降级

python manage.py db --help 帮助文档

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/83000367