flask05
文章目录
一、sqlalchemy
1.懒查询
- 解决问题:关系属性默认会将
所有的关联数据自动查询出来
,如果关联数据较多且不需要立即使用会导致性能浪费
- 作用:可以设置关系属性的懒查询机制,关联数据就不会自动查询了,关系属性会返回
可插入查询对象
- 查询方式:如果想要查询关联数据,再添加all/first/count/条件就会执行具体查询
- 更强大的功能:可插入查询对象 仍然可以像列表一样使用 append来关联数据,也可以通过遍历来取出关联数据
2.反向引用
- 定义:在有关联关系的表中可在一张表中根据关联属性查找另一张表的内容
- 普通方式:但是如果使用普通方法,那就可能在双方表里都设置关系属性进行关联
- 反向引用:设置关系属性的方向引用backref参数,等效于在关联的类中定义反向关系属性
二、数据迁移
- 作用:在
保留原数据的前提
下,更新数据库结构 - 安装数据迁移组件
flask-migrate
- 数据迁移还依赖
flask-script
脚本启动组件来生成迁移命令
- 三个命令:
- 生成迁移文件夹:
python xx.py mc init
- 生成迁移版本
python xx.py mc migrate -m "注释"
- 执行升级操作:
python xx.py mc upgrade
- 生成迁移文件夹:
- 查询相关命令:
- 查询历史版本:
python xx.py mc history
- 查询当前版本:
python xx.py mc current
- 查询历史版本:
- 注意:要进行相关的脚本启动参数设置,在执行网页前一定运行三个迁移命令创建出表。
四、蓝图
- 作用:实现flask项目
模块化
- app作为项目的核心对象,最好不要管理整个网站的所有路由,可以使用
蓝图对象
来分管不同功能模块路由
- 蓝图使用步骤
- 创建蓝图对象
- 使用蓝图来注册路由
- 应用注册蓝图对象
- 让视图函数和主程序建立关联
- 蓝图细节
五、Redis
1.nosql介绍
- 泛指非关系型的数据库
- nosql一般可以存储多种数据类型, 除了基本类型(数字、字符串、日期),还可以存储json、html等文件类型
- 数据以键值方式存取, 不能像关系型数据库一样使用外键建立表之间的关系, 不适合用于关系特别复杂的数据查询场景
- 每种nosql数据库都有自己的api和语法, 不支持SQL语法
- “事务”的支持:sql对事务的支持非常完善,而nosql基本不支持事务
- NoSQL中的产品种类相当多, 各有自己擅长的业务场景:
- Mongodb
- Redis
- Hbase hadoop
- Cassandra hadoop
2.Redis简介
- Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
- Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色
3.Redis 优势
- 性能极高 – 内存型数据库,读写速度极快
- 丰富的数据类型 – 支持存储 Strings, Lists, Hashes, Sets 及 Ordered Sets 等多种数据类型。
- 数据持久化 – 可以将内存数据保存到磁盘中, 并提供多种存储机制。
- 数据备份 – 支持主从模式 (master - slave) 的数据备份。
- 集群 – 支持集群, 并实现了哨兵机制。
- 丰富的特性 – 设置过期时间, 发布/订阅, 通知等机制。
4.Redis应用场景
- session存储 (性能更好, 方便设置过期时间)
- 购物车 (以请求令牌token作为key,记录当前用户购物车中的商品及其数量)
- 网页缓存 (将 请求的url/返回的网页内容 作为redis的key/value进行缓存)
5.Redis安装
- 删除已有redis
sudo rm -f /usr/bin/redis*
- 下载
- 解压
tar xzf redis-4.0.9.tar.gz
- 移动,放到usr/local/redis目录下
sudo mv ./redis-4.0.9 /usr/local/redis/
- 进入Redis目录
cd /usr/local/redis/
- 生成
sudo make
- 测试,这段运行时间会较长
sudo make test
- 安装,将redis的命令安装到/usr/local/bin/⽬录
sudo make install
- 安装完成后,我们进入目录/usr/local/bin中查看
cd /usr/local/bin
ls -all
- redis-server redis服务器
- redis-cli redis命令行客户端
- redis-benchmark redis性能测试工具
- redis-check-aof AOF文件修复工具
- redis-check-rdb RDB文件检索工具
- 配置文件,移动到/etc/目录下
sudo cp /usr/local/redis/redis.conf /etc/redis/
6.核心配置选项
- Redis的配置信息在/etc/redis/redis.conf下
- 绑定ip:如果需要远程访问,可将此行注释,或绑定个真实ip
bind 127.0.0.1
- 端口号默认为6379
port 6379
-
是否以守护进程运性
- 设置为yes表示以守护进程运⾏,不会在命令⾏阻塞,类似于服务
- 设置为no表示⾮守护进程, 当前终端被阻塞
daemonize yes
-
日志文件(错误信息) 存储路径
logfile “/var/log/redis/redis-server.log”
- 数据持久化文件名
dbfilename dump.rdb
- 数据持久化文件的存储路径
dir ./
- 自动持久化策略 如果60秒内执行了100次修改则自动保存一次
save 60 100 save 900 1
- 是否开启aof持久化机制
appendonly no
- 数据库,默认有16个
database 16
- 主从设置,指定主服务器的ip+端口
slaveof
7.服务端
- 开启数据库
redis-server # 以默认配置启动
redis-server ./redis.conf # 以自定义配置启动, 推荐
redis-server --help # 查看帮助文档
8.客户端
- 连接数据库
redis-cli # 以默认配置连接
redis-cli -h 127.0.0.1 -p 6379 # 连接指定服务的数据库
redis-cli --help # 查看帮助文档
如果开启数据库是时指定配置,打开数据库,默认就行
- 测试连接
ping
-
切换数据库
- 数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
select 10
-
数据持久化
bgsave # 异步持久化数据库
- 关闭数据库
shutdown [NOSAVE][SAVE] # 关闭数据库, 使用SAVE则会先持久化数据库再退出
- 强制杀死数据库 (不推荐)
# 查看数据库进程pid
lsof -i:6379
或
ps aux | grep redis
# 杀死redis数据库进程
sudo kill -9 pid
9.python交互
-
安装包
- 在虚拟环境中执行
pip install redis
- 代码导入
-
常见操作
- string
- set 添加/修改数据
- get 获取数据
- mset 添加多个数据
- mget 获取多个数据
- append 拼接数据
- 健命令
- del 删除数据
- type 获取数据类型
- exists 判断数据是否存在
- expire 设置过期时间
- ttl 获取剩余时间
- keys 查询满足条件的健
- hash(重点)
- 类似字典结构
- hset 添加数据
- hget 获取数据
- hmset 添加多个数据
- hmget 获取多个数据
- hdel 删除数据
- hkeys 获取数据的所有健
- hvals 获取数据的所有值
- string
六、Git
1. Git介绍
- 世界先进的
分布式
版本控制工具 - 作用:
代码备份
(存档)方便团队协同开发
(云盘)
2.生成版本(重点)
- 创建本地仓库
- VCS
- import into Version Control
- Create Git Repository
- 配置作者信息
- git config user.name zs
- git config user.email zs@itcast.cn
- 让git 管理文件
- vcs git add
- 生成版本 文件右键 git commit file
3.版本操作
- 先打开版本控制台在进行以下操作
- 对比版本
- 撤销修改
- 切换版本
- mixed和hard选项
- 切换到指定的版本 方式一
- 切换到指定的版本 方式二
- 查看历史版本, 找到目标版本号
git reflog
- VCS-Git-Reset Head-输入版本号
- 查看历史版本, 找到目标版本号
- mixed和hard选项
- 设置忽略文件
.gitignore
: 忽略文件, 如果不希望git监视项目中的某些文件/文件夹
, 可以将其路径设置到忽略文件中