WEB全栈
模型-Models
-
什么是模型
模型:根据数据库表结构而创建出来的class
一张表一个类
一个字段就是一个属性 -
模型框架—ORM
- ORM – Object Relational Mapping
对象关系映射
ORM,O/RM O/M Mapping - ORM的三大特征
- 数据表到编程类的映射
- 数据类型的映射
- 关系映射
将数据库中表与表之间的关系,对应到编程语言中类与类之间的关系。
3.ORM的优点
1.封装操作提升效率
2.省略庞大的数据访问层
- ORM – Object Relational Mapping
-
Flask中的ORM框架
-
SQLAlchemy
- 安装SQLAlchemy
pip3 install sqlalchemy - Flask中需要使用flask-sqlalchemy支持包
pip3 install flask-sqlalchemy
查看已安装的包 pip3 list
- 安装SQLAlchemy
-
创建数据库
创建一个flaskDB的数据库
create database flaskDB default charset=utf8 collate utf8_general_ci; -
Flask中配置数据库
app.config[‘SQLALCHEMY_DATABASE_URI’]=“mysql://用户名:密码@数据库服务器地址:端口号/数据库名称”示例: app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@127.0.0.1:3306/flaskDB'
from flask import Flask, request, render_template from flask_migrate import Migrate, MigrateCommand from flask_sqlalchemy import SQLAlchemy from flask_script import Manager from sqlalchemy import or_, func app = Flask(__name__) #连接到mysql中的FlaskDB数据库 app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/flaskDB' #指定不需要信号追踪 app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False #指定程序的启动模式为调试模式 app.config['DEBUG'] = True #指定执行完增删改之后的自动提交 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #创建SQLalchemy的实例 db = SQLAlchemy(app) # print(db) #创建Manager对象并指定要管理的app manager = Manager(app) #创建migrate对象,并指定关联的app 和 db migrate = Migrate(app,db) #为manager增加数据库迁移指令 #为manager增加一个子命令 --db(自定义),具体操作有MigrateCommand来提供 manager.add_command('db',MigrateCommand)
-
-
定义模型类
-
作用
通过编写模型类的方式,让程序自动生成数据库表
模型类也称为实体类 -
语法
class MODELNAME(DB.Model): __tablename__ = "TABLENAME" COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
-
MODELNAME 定义模型类名称,参考表名
-
TABLENAME 指定要映射到的表名,如果表不存在的话,则创建表
-
COLUMN_NAME 属性名,映射到数据表中就是列名
-
TYPE 映射到列的数据乐类型
-
OPTIONS 列选项
db.TYPE 列类型: 类型名 数据库 python 说明 Integer int int Float float float Numeric numeric Decimal 定点数 String varchar str Text text str Boolean tinyint bool Date date datetime.date DateTime datetime datetime.datetime OPTIOINS 列选项 选项名 说明 autoincrement 如果取值为true,则自动增长 注意: 如果列类型为整数,并且是主键的话,默认就是自增长的 primary_key 如果取值为true表示该列为主键 unique 如果取值为true表示该列唯一 index 如果取值为true表示该列加索引 nullable 如果取值为true表示该列可为空 default 指定该列默认值
练习:
- 创建Student实体类,表名student
- id,主键自增
- sname,姓名,长度为30且部位空字符串
- sage,年龄,整数
- isActive,启用状态,bool类型,默认为True
- 创建Teacher类,表名teacher
- id,主键自增
- tname,同sname一样
- tage,年龄,整数
- 创建Course类,表名course
- id
- cname,课程名称,长度为30字符串
class Student(db.Model): __tablename__ = "student" id = db.Column(db.Integer,primary_key=True) sname = db.Column(db.String(30),nullable=False) sage = db.Column(db.Integer) isActive = db.Column(db.Boolean,default=True) class Teacher(db.Model): __tablename__ = "teacher" id = db.Column(db.Integer, primary_key=True) tname = db.Column(db.String(30),nullable=False) tage = db.Column(db.Integer) class Course(db.Model): __tablename__ = "course" id = db.Column(db.Integer, primary_key=True) cname = db.Column(db.String(30))
-
-
-
数据库迁移
- 什么是数据库迁移?
将实体类的改动在映射回数据库。 - 依赖于第三方库。
- flask-script
安装:pip3 install flask-script
包:flask_script
类:Manager
作用,对项目进行管理。
启动项目,为项目增加管理指令。 - flask-migrate
安装:pip3 install flask-migrate
包:flask_migrate
类:- Migrate
作用:协调app和db 之间的关系 - MigrateCommand
作用:在终端中提供实体类迁移的指令
- Migrate
- flask-script
- python3 flaskDB.py db
-
init
作用:执行项目和数据库的初始化操作
特点:一个项目中只执行一次即可python3 run.py db init
-
migrate
作用:将编辑好的实体类生成一个中间文件并保存
特点:只要检测到实体类有更改,就会生成中间文件。python3 run.py db migrate
-
upgrade
作用:将中间文件映射会数据库python3 run.py db upgrade
-
- 什么是数据库迁移?
作业:
参考blog_finally中 register.html 和release.html 分析数据库模型
通过register.html分析用户表User有哪些列
通过release.html分析文章表Topic有哪些列
创建数据库 -- Blog
创建项目 - Blog
创建实体类 - User,Topic
create database Blog default charset=utf8 collate utf8_general_ci;