Flask基础入门学习笔记2.

2020-10-23 15:54:55 浏览数 (1)

[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.数据库操作
代码语言:javascript复制
创建数据库: db.create_all()
删除数据库:db.drop_all()
数据更新插入: db.session.add(Object) / db.session.add_all(List)
数据删除: db.session.delete(Object)
数据提交: db.session.commit()
  • 5.数据库查询:
代码语言:javascript复制
# 查询数据结果集
# 模型类.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 字段类型:

代码语言:javascript复制
Numeric

# 1.实际上都是整型的只是继承后然后改改名称不同而已;
Integer
SmallInteger
BigInteger

#2.浮点型
Float
Real


# 3.字符串(文本)类型
String

# 4.经Unicode编码后的类型
Unicode
Unicode Text

# 5.布尔值关系型数据库一般不支持用0、1代替
Boolean

Date
Time
Datetime

Interval

LargerBinary
代码语言:javascript复制
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
);

0 人点赞