Flask基础入门学习笔记2.
时间:2022-07-28
本文章向大家介绍Flask基础入门学习笔记2.,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[TOC]
Flask 模型: Flask 默认并没有提供任何数据库操作的API,我们可以选择任何合适自己项目的数据库来使用,可以采用原生的语句实现也可以采用ORM框架(SQLAlchemy / MongoEngine 扩展库) 实现;
Q: 原始SQL有何缺点?
答: 代码利用率低且条件复杂代码语句越长,有狠毒相似语句一些SQL是在业务逻辑中拼出来的修改需要了解业务逻辑,并且可能会导致一些SQL安全问题, 优点是性能好速度快;
Q: 使用ORM对象优点?
答: 实际上将对象的操作转换为原生的SQL,我们并不需要关注我们使用的是什么数据库只需要设计出模型Model即可;
- 1.易用性可以有效减少重复SQL
- 2.性能损耗少
- 3.设计灵活,可以轻松的实现复杂查询
- 4.移植性好
SQLAlchemy 连接流程:
- 1.指定数据库配置
app.config['SQLALCHEMY_DATABASE_URI']=DB_URI
以及禁止对象追踪修改app.config['SQLALCHEMY_TRAKE_MODIFICATIONS']=False
- 2.通过懒加载的方式初始化SQLalchemy()扩展;
- 3.数据库的使用创建模型class Person(db.model)
- 4.数据库操作
创建数据库: db.create_all()
删除数据库:db.drop_all()
数据更新插入: db.session.add(Object) / db.session.add_all(List)
数据删除: db.session.delete(Object)
数据提交: db.session.commit()
- 5.数据库查询:
# 查询数据结果集
# 模型类.query.查询方法
Student.query.frist()
Student.query.get(主键ID) # 返回Student对象主键数据否则None
Student.query.get_or_404(主键索引) # 找寻到返回数据否则返回404
Student.query.all() # 查询所有
# 蓝图属性
#模板/静态路径默认在Flask(app)创建的路径下,或者采用以下方式自定义模板路径
template_folder = "../templates" # Flask 创建或者在蓝图创建时指定
static_folder = "../static"
#蓝图统一前缀必须以/打头
url_prefix='/db'
#模板中也能使用反向解析(与Python代码一致)
def redirect():
return url_for('blue.get_student',id=1) # blue.get_student 是端点名称
静态资源软编码在Flask中默认支持的,
默认路径在和Flask同级别的static中
静态资源是有路由的endpoint是static参数有一个filename
<link rel="stylesheet" href="{{ url_for('static',filename='css/index.css') }}"/>
Flask开发帮助工具插件Flask-Debugtoolbar,它是从Django中借鉴的样式基本一致;
pip install Flask-Debugtoolbar
DebugToolbarExtension(app) # 在ext.py中进行初始化
关系型数据库最多使用的三种数据库类型: 数字 INT、字符串 CHAR、时间日期 DATETIME
SQLAlchemy 字段类型:
Numeric
# 1.实际上都是整型的只是继承后然后改改名称不同而已;
Integer
SmallInteger
BigInteger
#2.浮点型
Float
Real
# 3.字符串(文本)类型
String
# 4.经Unicode编码后的类型
Unicode
Unicode Text
# 5.布尔值关系型数据库一般不支持用0、1代替
Boolean
Date
Time
Datetime
Interval
LargerBinary
sqlite> .schema user
CREATE TABLE user(
uid INT PRIMARY KEY NOT NULL,
name VARCHAR(32) NOT NULL,
gender INT2 NOT NULL,
yearsofwork INT,
address VARCHAR(255)
);
class User(db.Model):
uid = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
gender = db.Column(db,Integer)
worktime = db.Column
sqlite> .schema recordtype
CREATE TABLE recordtype (
rid INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL
);
sqlite> .schema record
CREATE TABLE record(
rid INT PRIMARY KEY NOT NULL,
uid INT NOT NULL,
starttime TIMESTAMP NOT NULL,
endtime TIMESTAMP NOT NULL,
applytime TIMESTAMP NOT NULL,
context CHAR(255) NOT NULL,
daytype CHAR(32) NOT NULL,
recordtime TIMESTAMP NOT NULL
);
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux进程间通信(中)之信号、信号量实践
- Linux进程间通信(下)之共享内存实践
- 手把手教你快速使用Vmware虚拟机安装Linux操作系统实验环境
- 天啊!鹅厂都开始做开发板了?网红腾讯物联网开发板终极开箱评测,让我们一睹为快!
- 我用 React 和 Vue 构建了同款应用,来看看哪里不一样(2020 版)
- 大点干!早点散----------深入剖析Redis集群原理与实验
- 微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!
- 苏宁基于 ClickHouse 的大数据全链路监控实践
- CORS Cross Origin Resource Sharing
- 从0开始做播放器-第二季-第2章-Android NDK 工程的建立和 JNI 的基本用法
- 记一次线上问题排查-maven父子结构依赖所遇到的坑
- 『技术随手学』解决 pip conda install 网络故障中断
- boost asio
- 7.SwrContext音频重采样使用
- 8.ffmpeg-基础常用知识