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…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
