ORM概述
1_ORM概述[理解]
- 解释: 对象关系映射模型
- 特点:
- 1.将类名,属性, 映射成数据库的表名和字段
- 2.类的对象,会映射成为数据库表中的一行一行的数据
- 优缺点:
- 优点:
- 1.不再需要编写sql语句
- 2.不再关心使用的是什么数据库了
- 缺点:
- 1.由于不是直接通过sql操作数据库,所以有性能损失
- 优点:
2_ORM操作流程[掌握]
- 操作流程:
- 1.安装扩展
- pip install flask_sqlalchemy
- pip install flask_mysqldb / pymysql
- 2.设置数据库的配置信息
- 3.创建sqlalchemy对象db,关联app
- 4.编写模型类,继承自db.Model,编写字段
- 5.操作数据库
- 增删改
- 查询
- 1.安装扩展
3_ORM操作注意[理解]
-
注意点:
-
1.因为SQLALChemy去app身上读取了配置信息,所以需要设置到app.config身上
-
2.数据库的链接信息
- 如果安装的是flask_mysqldb, 那么链接信息: mysql://<用户名>:<密码>@<ip地址>:<端口号>/<数据库名字>
- 如果安装的是pymysql, 那么链接信息: mysql+pymysql://<用户名>:<密码>@<ip地址>:<端口号>/<数据库名字>
-
3.编写的模型类必须继承自db.Model才能被映射
-
4.如果不指定表名称,默认生成的就是模型类的小写,如果需要自己指定表名使用_tablename_=‘表名’
-
5.ORM在进行映射的时候不能生成数据库的
-
4_数据库增删改[掌握]
- 增删改
- 全部都是使用db.session操作
- 常见方法:
- db.session.add(obj) 添加单个对象
- db.session.add_all([obj1,obj2]) 添加多个对象
- db.session.delete(obj) 删除单个对象
- db.session.commit() 提交会话
- db.drop_all() 删除继承自db.Model所有表
- db.create_all() :创建继承自db.Model的所有表
- 其他:
- db.session.rollback() 回滚
- db.session.remove() 移除会话
- 案例: 编写两个模型类, 一个角色模型类, 还有一个用户模型类
- 关系: 一对多
- 注意点:
- 如果想要打印一个对象的时候看到指定的信息, 那么重写__repr__方法
5_数据库基本查询[掌握]
- 全部都是通过, 模型类.query来进行的
- 使用常见的12条语句
6_数据库关系查询relationship[掌握]
-
解释: 为了方便数据库的关联查询
-
特点:
- 1.不会在数据库产生实体字段
- 2.关系属性,需要在一方添加
- 3.外键是添加在一方的, 并且关系属性的使用,需要依赖于外键
-
需求:
-
1.如果知道了角色的情况下,能否快速查询出,哪些用户扮演了该角色
- 原始查询方法:
- role = Role.query.get(1)
- users = User.query.filter(User.role_id == role.id).all()
- 快速查询:
- 使用relationship添加关系属性,就可以快速查询了.
- 格式:
- users = db.relationship(“多方的模型类”)
- 使用格式:
- role = Role.query.get(1)
- users = role.users
- 原始查询方法:
-
7_数据库反向查询backref[掌握]
- 解释:如果知道了用户的情况下,能否快速查询出,哪些该用户扮演了哪个角色
- 原始查询方法:
- user = User.query.get(1)
- role = Role.querye.filter(Role.id == user.role_id).first()
- 快速查询:
- 使用backref添加反向属性,就可以快速查询了
- 格式:
- users = db.relationship(“多方的模型类”,backref=“role”)
- 快速查询:
- user = User.query.get(1)
- role = user.role
8_数据库懒查询lazy[了解]
- 解释: 一旦使用了relationship,backref,那么系统会自动做子查询
- 子查询(subquery): 查询出了一方, 就会自动的讲关联的一方查询出来
- 动态查询(dynamic): 只有用到了才去查询
- lazy使用
- db.relationship(“多方的模型类”,backref=“role”,lazy=“dynamic”)
9_图书馆数据库搭建[掌握]
- 分析图书馆案例
- 1.数据库配置
- 作者模型(一方)
- 书籍模型(多方)
- 2.添加测试数据
- 3.添加作者,书籍
- 4.删除作者,删除书籍
- 1.数据库配置
10_图书馆测试数据添加[掌握]
- 提示: 测试数据,见讲义文档
11_图书馆测试数据显示[掌握]
- 步骤
- 1.查询所有作者信息
- 2.携带作者信息,渲染页面
12_图书馆添加数据[掌握]
- 添加的逻辑分析:
- 1.如果作者存在,书籍存在, 不能添加
- 2.如果作者存在,书籍不存在,可以添加
- 3.如果作者不存在,可以添加
13_图书馆删除书籍[掌握]
- 步骤
- 1.根据书籍编号获取书籍对象
- 2.删除书籍对象
- 3.重定向到页面展示
14_图书馆删除作者[掌握]
- 步骤
- 1.根据作者编号获取作者对象
- 2.遍历删除,作者书籍对象
- 3.删除作者,提交数据库
- 4.重定向到页面展示
15_图书馆CSRFProtect应用[掌握]
- 作用: 防止csrf攻击的[项目倒数第二天看源代码校验过程]
- 使用步骤:
- 1.导入类CSRFProtect
- 2.使用CSRFProtect保护app
- 一旦使用POST,PUT,DELTE,PATCH方式提交的时候就需要校验csrf_token
- 3.需要设置SECRET_KEY,用来加密csrf_token
- 4.设置csrf_token到表单中
16_表结构多对多分析[掌握]
- 解释: 多对多的关系,一般会被拆分成两张一对多的表
17_表结构多对多代码演练[掌握]
-
中间表:
tb_student_course = db.Table("tb_student_course",db.Column("student_id",db.Integer,db.Foreign("students.id"))db.Column("courses_id",db.Integer,db.Foreign("courses.id")) )
18_表结构模板代码分析[了解]
- 提示: 见keynote, PDF文档
19_数据库迁移[掌握]
- 目的: 当数据库的表结构发生变化之后,如果直接删除原有的数据,再添加新的数据,有可能导致数据丢失
- 注意点:
- 1.是为了备份表结构,而不是数据
- 2.如果想要备份数据,需要使用工具,navicat,mysqlworkbench,等等
- 3.更新的过程数据一般不会丢失,做降级的时候需要谨慎操作
- 操作流程:
- 1.安装扩展
- pip install flask_script
- pip install flask_migrate
- 2.导入三个类
- from flask_script import Manager
- from flask_migrate import Migrate, MigrateCommand
- 3.通过Manager类创建对象manager,管理app
- manager = Manager(app)
- 4.使用Migrate,关联db,app
- Migrate(app,db)
- 5.给manager添加一条操作命令
- manager.add_command(“db”,MigrateCommand)
- 相关迁移命令:
- 生成迁移文件夹[一次就好]
- python xxx.py db init
- 将模型类生成迁移脚本[重复执行]
- python xxx.py db migrate -m ‘注释’
- 将迁移脚本更新到数据库中[重复执行]
- python xxx.py db upgrade/downgrade [version]
- 其他命令
- 查看最新版本的命令
- python xxx.py db show
- 查看当前版本
- python xxx.py db current
- 查看所有的历史版本
- python xxx.py db history
- 查看最新版本的命令
- 生成迁移文件夹[一次就好]
- 1.安装扩展
相关文章:
ORM概述
1_ORM概述[理解] 解释: 对象关系映射模型特点: 1.将类名,属性, 映射成数据库的表名和字段2.类的对象,会映射成为数据库表中的一行一行的数据 优缺点: 优点: 1.不再需要编写sql语句2.不再关心使用的是什么数据库了 缺点: 1.由于不是直接通过sql操作数据库,所以有性能损失 2_…...
程序员必知必会7种UML图(类图、序列图、组件图、部署图、用例图、状态图和活动图)画法盘点
众所周知,软件开发是一个分阶段进行的过程。不同的开发阶段需要使用不同的模型图来描述业务场景和设计思路,在不同的阶段输出不同的设计文档也是必不可少的,例如,在需求分析阶段需要输出领域模型和业务模型,在架构阶段…...
基于asp的搜索引擎开发和实现
随着因特网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找信息,就像大海捞针一样,搜索引擎技术恰好解决了这一难题。目前,搜索引擎系统可以分类三大类,分别是:目录式搜索引擎:以人工方式或半…...
代码随想录刷题-字符串-实现 strStr()
文章目录实现 strStr()习题暴力解法kmp 解法实现 strStr() 本节对应代码随想录中:代码随想录,讲解视频:帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili、帮你把KMP算法学个通透!࿰…...
前端已死?金三银四?你收到offer了吗?
目录 一、前言 二、“唱衰” 三、不局限于框架、前端 四、打动面试官 五、正向加成 六、小结 一、前言 最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机,甚至使用“前端已死”的字眼,颇有“语不惊人死不休”的意味,对老鸟来说&a…...
C生万物 | 十分钟带你学会位段相关知识
结构体相关知识可以先看看这篇文章 —— 链接 一、什么是位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned int 或signed int位段的成员名后边有一个冒号和一个数字 在下面,我分别写了一个结构体和一个位段&…...
Spring Boot基础学习之(十):修改员工的信息
注意:spring boot专栏是一个新手项目,博文顺序则是功能实现的流程,如果有看不懂的内容可以到前面系列去了解。 本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在本篇代码DAO层将通过Java文件去实现,在这里就不连接数…...
闭关十几天,我完成了我的毕业设计
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃个人状态: 在校大学生一枚,已拿多个前端 offer(…...
认识rust的项目管理工具--cargo
cargo 提供了一系列的工具,从项目的建立、构建到测试、运行直至部署,为 Rust 项目的管理提供尽可能完整的手段。不过,我们无需再手动安装,之前安装 Rust 的时候(用rustup或者vscode加插件的方式安装)&#…...
面试常问的Linux之 I/O 复用
I/O 复用 一、I/O的概念 在Linux系统中,I/O(输入/输出)指的是计算机系统的数据交换过程,包括从外部设备读取数据(输入)和将数据发送到外部设备(输出)。I/O操作是Linux系统中非常重要…...
MySQL-binlog+dump备份还原
目录 🍁binlog日志恢复 🍂binlog介绍 🍂Binlog的用途 🍂开启binary log功能 🍂配置binlog 🍁mysqldump 🍂数据库的导出 🍂数据库的导入 🍁mysqldumpbinlog 🦐…...
互联网络-单级互联网络
1.立方体单级网络 1.定义 立方体单级网络(cube)的名称来源于下图所示的三维立方体结构,如010只能连接到000、011、110,不能直接连接到对角线上的001、100、101、111。 2.例题 1.编号为0、1、2、3、4,…,15的16个处理器,用单级互联网络互联,用Cube0互联函数时,与第10…...
上海亚商投顾:沪指四连阳重回3300点 中字头个股再发力
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指低开后震荡反弹,创业板指盘中跌超1%。中字头个股再度发力&#x…...
LeetCode:150. 逆波兰表达式求值—栈
🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 一、🌱150. 逆波兰表达式求值 题目描述:给你一个字符串数组 token…...
C/C++每日一练(20230410) 二叉树专场(4)
目录 1. 二叉搜索树迭代器 🌟🌟🌟 2. 验证二叉搜索树 🌟🌟🌟 3. 不同的二叉搜索树 II 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专…...
策化整理1
概述: 本游戏是一款恐怖类解密游戏,以反应毒品的危害和反对家庭暴力为主题 在游戏中玩家扮演被困入梦境内的主人公,寻找逃出梦境的方法 本游戏故事大背景: 主人公的父亲是一名毒贩,在母亲发现父亲开始吸毒后选择与父亲…...
【服务通信自定义srv调用3----客户端的优化】
客户端的优化 服务通信自定义srv调用,客户端随意提交两个数,完成数的相加。也就是实现参数的动态提交: 1.格式:rosrun xxxx xxxx 12 34 2.节点执行时候,需要获取命令中的参数,并且组织进 request 代码中应…...
React跨域解决方案
一、跨域日志报错 我们由于项目需要经常会需要对不同域名、不同子域的网站接口发起请求,有时甚至是对于同一域名的不同端口发起请求,此时我们经常看到以下报错: Access to XMLHttpRequest at xxx from origin xxx has been blocked by COR…...
内存五区的概念,内存池技术的诞生。
首先提出一道经典的面试题来引出今天的主角: 进程的虚拟空间分布是什么样的,全局变量放在哪里? 在数据初始化之后,全局变量放在.data段 在数据未初始化时,全局变量放在.bss段 内存五区 进程虚拟内存主要分为五个部分…...
力扣:字符串中的第一个唯一字符(C++实现)
题目部分: 解题思路: 方案一: 首先认真审题的小伙伴们一定会发现就是题目给了提示只包含小写字母,也就是说我们的排查范围是小写的26个字母。为了怕有的友友们一时短路想不起来,我就其按照顺序列出来吧。 即&#x…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
