flask框架4

flask框架4

一. 图书案例 (重点)
1. 定义模型&添加测试数据
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)


# 设置数据库的连接地址
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:mysql@127.0.0.1:3306/book20"
# 是否监听数据库变化  一般不打开, 比较消耗性能
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 创建数据库操作对象(建立了数据库连接)
db = SQLAlchemy(app)


# 作者表  一
class Author(db.Model):
    __tablename__ = "authors"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(48), unique=True)
    books = db.relationship("Book", backref="author")  # 关系属性


# 书籍表  多
class Book(db.Model):
    __tablename__ = "books"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(48), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey("authors.id"))  # 设置外键


@app.route('/')
def index():

    return "index"


if __name__ == '__main__':
    # 会删除所有继承db.Model的表
    db.drop_all()
    # 会创建所有继承自db.Model的表
    db.create_all()

    # 生成数据
    au1 = Author(name='老王')
    au2 = Author(name='老尹')
    au3 = Author(name='老刘')
    # 把数据提交给用户会话
    db.session.add_all([au1, au2, au3])
    # 提交会话
    db.session.commit()
    bk1 = Book(name='老王回忆录', author_id=au1.id)
    bk2 = Book(name='我读书少,你别骗我', author_id=au1.id)
    bk3 = Book(name='如何才能让自己更骚', author_id=au2.id)
    bk4 = Book(name='怎样征服美丽少女', author_id=au3.id)
    bk5 = Book(name='如何征服英俊少男', author_id=au3.id)
    # 把数据提交给用户会话
    db.session.add_all([bk1, bk2, bk3, bk4, bk5])
    # 提交会话
    db.session.commit()

    app.run(debug=True)
2. 显示界面

在这里插入图片描述

3. 增加数据

在这里插入图片描述

  • 数据库操作必须进行异常捕获
  • 数据库增删改操作失败, 需要回滚

在这里插入图片描述

4. 删除数据
  • 删除书籍
    • 使用动态URL来传递书籍信息
    • 查询书籍模型, 从数据库中删除数据

在这里插入图片描述

  • 删除作者
    • 使用查询字符串来传递作者信息
    • 删除作者和书籍 删除一对多关系数据时, 先删除多的一方
      在这里插入图片描述
二. 多对多关系
  • 实现多对多关系, 必须定义一张关系表来记录外键, 来实现两张表的关联

在这里插入图片描述

三. 数据迁移
  • 作用: 在保留原数据的前提下, 更新表结构

  • 需要安装flask组件 flask-migrate

  • 数据迁移需要依赖脚本启动组件flask-script(需要利用脚本启动组件生成迁移命令)

  • 迁移命令

    • 初始化迁移文件夹 python hm_03_数据迁移.py mc init
    • 生成版本(会自动根据现有代码的数据库结构, 生成升级代码) python hm_03_数据迁移.py mc migrate -m "构建表结构"
    • 升级版本 python hm_03_数据迁移.py mc upgrade

在这里插入图片描述

  • 当前当前版本 python hm_03_数据迁移.py mc current
  • 查看历史版本 python hm_03_数据迁移.py mc history
  • 切换到指定的版本(版本号前6位) python hm_03_数据迁移.py mc upgrade 956979
四. 蓝图
1. 蓝图的基本使用 (重点)
  • 作用: 让flask项目实现模块化
  • 想要在其他文件中注册路由, 不能使用app, 必须使用蓝图

在这里插入图片描述

五. Redis
1. NOSQL 和 Redis介绍 (了解)
  • nosql: 非关系型数据库

  • 数据以键值方式存取, 不能像关系型数据库一样使用外键建立表之间的关系, 不适合用于关系特别复杂的数据查询场景

  • 数据库存放形式很多, 每种非关系型数据库又有自己的使用场景

  • Redis优势

    • 性能极高 – 内存型数据库,读写速度极快
    • 丰富的数据类型 – 支持存储 Strings, Lists, Hashes, Sets 及 Ordered Sets 等多种数据类型。
    • 数据持久化 – 可以将内存数据保存到磁盘中, 并提供多种存储机制。
    • 数据备份 – 支持主从模式 (master - slave) 的数据备份。
    • 集群 – 支持集群, 并实现了哨兵机制。
    • 丰富的特性 – 设置过期时间, 发布/订阅, 通知等机制。
  • Redis应用场景

    • session存储 (性能更好, 方便设置过期时间)
    • 网页缓存 (将 请求的url/返回的网页内容 作为redis的key/value进行缓存)
2. 配置
  • 配置文件 /etc/redis/redis.conf
3. 客户端&服务端 命令
  • 启动redis数据库 sudo redis-server /etc/redis/redis.conf
  • 终端访问redis数据库 sudo redis-cli -h 127.0.0.1 -p 6379
4. String (重点)
  • 5个命令:
  • set 添加/修改数据
  • get 获取数据
  • mset 添加多个数据
  • mget 获取多个数据
  • append 拼接数据
5. 键命令 (重点)
  • 6个命令:
  • del 删除数据
  • type 获取数据类型
  • exists 判断数据是否存在
  • expire 设置数据的过期时间
  • ttl 查看数据剩余过期时间
  • keys * 根据条件查询匹配的键
6. hash
  • 类似字典格式
  • 7个命令
    • hset 设置数据的某个字段
    • hget 获取数据的某个字段
    • hmset 设置数据多个字段
    • hmget 获取数据的多个字段
    • hdel 删除数据的字段
    • hkeys 获取数据的所有字段名
    • hvals 获取数据的所有字段数据
7. list
  • 栈结构, 先进后出
  • 5个命令
    • lpush 添加数据
    • lrange 获取数据
    • linsert 插入数据
    • lset 修改数据
    • lrem 删除数据
8. zset 和 set
  • zset 有序集合 按照权重进行排序

  • 6个命令:

    • zadd 添加数据
    • zrange 获取数据
    • zscore 获取数据的权重
    • zrem 删除数据
    • zrangebyscore 获取指定范围的数据
    • zremrangebyscore 删除指定范围的数据
  • set 无序集合 无序且去重

  • 3个命令

    • sadd 添加数据
    • smembers 获取数据
    • srem 删除数据
9. python操作redis (重点)

安装第三方包 pip install redis

from redis import StrictRedis

# 创建redis的操作对象(建立连接)  decode_responses=True自动解码
sr = StrictRedis(host="127.0.0.1", port=6379, db=0, decode_responses=True)
# 操作redis
# 添加数据
sr.set("name", "zs", ex=10)
# 获取数据
print(sr.get("name"))

# 关闭数据库  只要设置了自动持久化策略, 都会将数据先保存到硬盘中, 再关闭
sr.shutdown()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值