flask06 flask模型操作

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)}}
      查询比较复杂:
  • 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()
  • 运算符:

  1. contains
  2. startswith
  3. endswith
  4. in_
  5. like
  6. gt
  7. ge
  8. lt
  9. le

  • contains(‘xx’)包含xx字符
  • in
  • like:模糊查询。

模型query. 查询函数

  1. filter_by()
  2. offset()
  3. limit()
  4. order_by()
  5. get()
  6. first()
  7. 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接口怎么写)

发布了32 篇原创文章 · 获赞 0 · 访问量 3438

猜你喜欢

转载自blog.csdn.net/qq_43213352/article/details/104093878
今日推荐