Moodel
ORM框架:SQLALchemy
将对象的操作,转变成sql语句,降低部分效率
- 数据库连接
- 连接sqlite:db_uri = sqlite:///sqlite3.db
- 连接mysql:前面已有。
- 数据类型:
- Integer (大的,小的其实都是一种)
- 字符串中 String,Text,Unicode也没什么区别
必须要在views里面导入到了模型,才会将模型进行orm映射;
python manager.py db migrate
python manage.py db upgrade
python manage.py db downgrade # 回退版本
- 数据操作:
db.create_all()
db.drop_all()
db.session.add(object)
db.session.add_all(list(object))
db.session.delete(object)
db.session.commit()
# 删除基于查询
# 查询语法:
# 类名.query.xx
user = User.query.first()
user = User.query.get_or_404()
....get(id)#只支持id,返回对象 or none
...all()
#删除
#查出对象 student,然后
db.sesion.delete(student)
db.session.commit()
# 更新:
#查出对象,修改需要改变的值,然后添加到session然后提交
注意要点:如果模版文件夹不在app文件夹里面。那么返回数据到模板需要改变:
app=Flask(name,template_folder='模板文件夹的相对路径’)
或者: 蓝图初始化的时候,指定模版路径。(蓝图还可以加uil_prefix='前缀‘)
对应的来说,static文件夹也可以自己配置地方;
static_folder=’…/static’
-
这样能够把 模版文件夹,static folder 都拿出来
-
template中,反向解析css文件的路径:不写死了
- href="{{ url_for(‘static’,filename='css/students.css)}}
查询比较复杂:
- href="{{ url_for(‘static’,filename='css/students.css)}}
-
flask-debugtoolbar 扩展
-
使用(初始化)install 完
- DebugToolbarExtension(app)(不知道怎么看不到)
-
重定向,反向解析到url顺便传参:
- url_for(‘blue.getstudent’,id=1(key=value))
-
静态资源在flask中,默认路径在flask同级的static中
- 可以自己指定:
- 创建app的时候
- 创建蓝图的时候指定
- 可以自己指定:
模型建立时候约束:
-
index:索引
-
修改表名: tablename = ‘tablename’
python manager.py db (migrate) upgrade
-
模型类继承:
- 默认的继承是不能用的,子类和父类混成一个表,都变成一个表的字段了 (现在时间2020/01/24-02:13)
- 解决方案:父类 设置成 abstract = True
- 子类会分别建表。(这样就不会有问题)
-
通过看文档,查百度来了解更多的知识
-
数据库连接优化
- 怎么连接
- 连接多少个
-
flask中默认是有数据库连接池的
- 超过数据库中的连接数。就要排队等待。
-
查询:
- 获取单个对象:
- query.first()
- query.get(id)
- query.get_or_404()
- 获取结果集:
- all();
- filter:
- 语法:
- filter(class.attribute.运算符(‘xxx’)
- filter(类名.属性 运算符 值)
students = Student.query.filter(Student.id.__eq__(1)).all()
- 得到的是BaseQuery对象。__str__输出的是这个对象数据由来的sql
- 如果加入.all(),返回的是一个list对象(只能放到最后使用)
- eq,lt(小于)等方法
- 另一种语法:students = Student.query.filter(Student.id==(1)).all()
- 获取单个对象:
-
运算符:
- contains
- startswith
- endswith
- in_
- like
- gt
- ge
- lt
- le
- contains(‘xx’)包含xx字符
- in
- like:模糊查询。
模型query. 查询函数
- filter_by()
- offset()
- limit()
- order_by()
- get()
- first()
- paginate()
- filter_by():根据某一字段某一条件去筛选
- offset:偏移,跳过
- limit():限制几个,进行分页
- paginate()分页。
- limit和offset不区分顺序,不管谁写前边,都是先执行offset
- order_by排序必须在limit和offset前面
- 分页的本质需要客户端告诉我第几m页,每页多少个n。也就是前偏移(跳过前面的页,然后再往后面查出n个
- 指定url传参,类型以及默认值:
page = request.args.get('page',1,type=int)
默认1
- paginate :封装了一下分页要使用的limit,offser操作
student = Student.query.paginate().items#list 不能直接返回
需要url里面传参数:?page=1&per_page=4
p29:级连数据,外键2.(看到这里先跳一下,看rest接口怎么写)