flask框架入门和总结(二)

模型 - Models

什么是模型
**模型,是根据数据库中表的结构来创建出来的class。每一张表到编程语言中就是一个class,表中的每一个列,到编程语言中就是class中的一个属性。
ORM的三大特征
1.数据表(table) 到 类(class) 的映射
数据库中的每一张表 对应 到编程语言中,都有一个类
在ORM中
允许将数据表 自动 生成一个类
也允许将类 自动 生成一张表
2.数据类型的映射
将数据库表中的字段以及数据类型 对应到 编程语言中类的属性
在ORM中
允许将表中的字段和数据类型自动映射到编程语言中
也允许将类中的属性和类型也映射到数据库表中
3.关系映射
将数据库中表之间的关系 对应 到编程语言中类之间的关系
数据库表之间的关系:
一对一,一对多,多对多

ORM的优点
1.提高了开发的效率
2.可以省略庞大的数据访问层,即便不用SQL编码也能完成对数据的CRUD操作
3.定义模型

数据库 和 框架的配置

1.安装 SQLAlchemy
pip3 install sqlalchemy
pip3 install flask-sqlalchemy
2.创建数据库
create database flask default charset utf8 collate utf8_general_ci;
3.配置数据库

from flask import Flask
#将SQLAlchemy导入进来
from flask_sqlalchmey import SQLAlchemy

app = Flask(__name__)

#app.config['SQLALCHEMY_DATABASE_URI']='mysql://username:pwd@host:port/dbname'
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@localhost:3306/flask'

#创建SQLAlchemy的实例
db = SQLAlchemy(app)

#db是SQLAlchemy的实例,表示程序正在使用的数据库,同时也获得了SQLAlchemy中的所有功能

if __name__ == "__main__":
	app.run(debug=True)

定义模型
模型:数据库中的表在编程语言中的体现,其本质就是一个Python 的类(可称为:模型类 或 实体类)。类中的属性要与数据库表中的列相对应

语法:

class MODELNAME(db.Model):
__tablename__ = "TABLENAME"
COLUMN_NAME = db.Column(db.TYPE,OPTIONS)

1.MODELNAME:定义模型类名称,根据表名设定
2.TABLENAME:映射到数据库中表的名字
3.COLUMN_NAME:属性名,映射到表中列的名字
4.db.TYPE:映射到列的数据类型
5.OPTIONS:列选项

db.TYPE 列类型如下:

类型名         python类型         说明
Integer        int                普通整数,32位
SamllInteger   int                小范围整数,通常16位
BigInteger     int或long          不限精度的整数
Float          float              浮点数
Numeric        decimal.Decimal    定点数
String         str                变长字符串
Text           str                变长字符串,优化
Unicode        unicode            变长Unicode字符串
UnicodeText    unicode            优化后的变长Unicode
Boolean        bool               布尔值
Date           datetime.date      日期
Time           datetime.time      时间
DateTime       datetime.datetime  日期和时间

OPTIONS 列选项

选项名           说明
primary_key      设置为True则表示该列为主键
unique           设置为True则表示该列的值唯一
index            设置为True则表示该列要创建索引
nullable         设置为True则表示该列允许为空
default          为该列定义默认值

SQLAlchemy - 查询

1.基于 db.session

1.db.session.query()
参数:实体,多个实体,实体中的属性
返回值:BaseQuery()

1.查询执行函数
	1.all()
	2.first()
	3.first_or_404()
	4.count()
2.查询过滤器
	1.filter()
	2.filter_by()
	3.limit()
		limit().offset()
	4.order_by()
	5.group_by()

2.基于 Models

Models.query.查询过滤器().查询执行函数()

删除 :db.session.delete(model)
	model : 要删除的实体对象
修改 :
	1.查 2.改 3.保存

3.关系映射
Teacher :id,tname,tage (多)
Course : id,cname (一)

一名老师只能教一门课
一门课可以由多个老师来教

数据库中的实现:
在"多"表中增加外键引用自"一"表中主键

class Course(db.Model):
	__tablename__ = 'course'
	id = db.Column()
	...
	# Teacher类中会存在一个隐式属性 :course
	teachers = db.relationship('Teacher',backref='course',lazy='dynamic')

class Teacher(db.Model):
	__tablename__ = 'teacher'
	id = db.Column()
	tname = db.Column()
	..
	course_id = db.Column(db.Integer,db.ForeignKey('course.id'))
发布了41 篇原创文章 · 获赞 8 · 访问量 1965

猜你喜欢

转载自blog.csdn.net/big_white_py/article/details/102773683