当前位置: 首页 > news >正文

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.操作数据库
      • 增删改
      • 查询

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.删除作者,删除书籍

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

相关文章:

ORM概述

1_ORM概述[理解] 解释: 对象关系映射模型特点: 1.将类名,属性, 映射成数据库的表名和字段2.类的对象,会映射成为数据库表中的一行一行的数据 优缺点: 优点: 1.不再需要编写sql语句2.不再关心使用的是什么数据库了 缺点: 1.由于不是直接通过sql操作数据库,所以有性能损失 2_…...

程序员必知必会7种UML图(类图、序列图、组件图、部署图、用例图、状态图和活动图)画法盘点

众所周知&#xff0c;软件开发是一个分阶段进行的过程。不同的开发阶段需要使用不同的模型图来描述业务场景和设计思路&#xff0c;在不同的阶段输出不同的设计文档也是必不可少的&#xff0c;例如&#xff0c;在需求分析阶段需要输出领域模型和业务模型&#xff0c;在架构阶段…...

基于asp的搜索引擎开发和实现

随着因特网的迅猛发展、WEB信息的增加&#xff0c;用户要在信息海洋里查找信息&#xff0c;就像大海捞针一样&#xff0c;搜索引擎技术恰好解决了这一难题。目前&#xff0c;搜索引擎系统可以分类三大类&#xff0c;分别是&#xff1a;目录式搜索引擎&#xff1a;以人工方式或半…...

代码随想录刷题-字符串-实现 strStr()

文章目录实现 strStr()习题暴力解法kmp 解法实现 strStr() 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;帮你把KMP算法学个通透&#xff01;&#xff08;理论篇&#xff09;_哔哩哔哩_bilibili、帮你把KMP算法学个通透&#xff01;&#xff0…...

前端已死?金三银四?你收到offer了吗?

目录 一、前言 二、“唱衰” 三、不局限于框架、前端 四、打动面试官 五、正向加成 六、小结 一、前言 最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机&#xff0c;甚至使用“前端已死”的字眼&#xff0c;颇有“语不惊人死不休”的意味&#xff0c;对老鸟来说&a…...

C生万物 | 十分钟带你学会位段相关知识

结构体相关知识可以先看看这篇文章 —— 链接 一、什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int位段的成员名后边有一个冒号和一个数字 在下面&#xff0c;我分别写了一个结构体和一个位段&…...

Spring Boot基础学习之(十):修改员工的信息

注意&#xff1a;spring boot专栏是一个新手项目&#xff0c;博文顺序则是功能实现的流程&#xff0c;如果有看不懂的内容可以到前面系列去了解。 本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在本篇代码DAO层将通过Java文件去实现&#xff0c;在这里就不连接数…...

闭关十几天,我完成了我的毕业设计

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端&#xff08;Node.js&#xff09; &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;…...

认识rust的项目管理工具--cargo

cargo 提供了一系列的工具&#xff0c;从项目的建立、构建到测试、运行直至部署&#xff0c;为 Rust 项目的管理提供尽可能完整的手段。不过&#xff0c;我们无需再手动安装&#xff0c;之前安装 Rust 的时候&#xff08;用rustup或者vscode加插件的方式安装&#xff09;&#…...

面试常问的Linux之 I/O 复用

I/O 复用 一、I/O的概念 在Linux系统中&#xff0c;I/O&#xff08;输入/输出&#xff09;指的是计算机系统的数据交换过程&#xff0c;包括从外部设备读取数据&#xff08;输入&#xff09;和将数据发送到外部设备&#xff08;输出&#xff09;。I/O操作是Linux系统中非常重要…...

MySQL-binlog+dump备份还原

目录 &#x1f341;binlog日志恢复 &#x1f342;binlog介绍 &#x1f342;Binlog的用途 &#x1f342;开启binary log功能 &#x1f342;配置binlog &#x1f341;mysqldump &#x1f342;数据库的导出 &#x1f342;数据库的导入 &#x1f341;mysqldumpbinlog &#x1f990;…...

互联网络-单级互联网络

1.立方体单级网络 1.定义 立方体单级网络(cube)的名称来源于下图所示的三维立方体结构,如010只能连接到000、011、110,不能直接连接到对角线上的001、100、101、111。 2.例题 1.编号为0、1、2、3、4,…,15的16个处理器,用单级互联网络互联,用Cube0互联函数时,与第10…...

上海亚商投顾:沪指四连阳重回3300点 中字头个股再发力

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪大小指数今日走势分化&#xff0c;沪指低开后震荡反弹&#xff0c;创业板指盘中跌超1%。中字头个股再度发力&#x…...

LeetCode:150. 逆波兰表达式求值—栈

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;150. 逆波兰表达式求值 题目描述&#xff1a;给你一个字符串数组 token…...

C/C++每日一练(20230410) 二叉树专场(4)

目录 1. 二叉搜索树迭代器 &#x1f31f;&#x1f31f;&#x1f31f; 2. 验证二叉搜索树 &#x1f31f;&#x1f31f;&#x1f31f; 3. 不同的二叉搜索树 II &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专…...

策化整理1

概述&#xff1a; 本游戏是一款恐怖类解密游戏&#xff0c;以反应毒品的危害和反对家庭暴力为主题 在游戏中玩家扮演被困入梦境内的主人公&#xff0c;寻找逃出梦境的方法 本游戏故事大背景&#xff1a; 主人公的父亲是一名毒贩&#xff0c;在母亲发现父亲开始吸毒后选择与父亲…...

【服务通信自定义srv调用3----客户端的优化】

客户端的优化 服务通信自定义srv调用&#xff0c;客户端随意提交两个数&#xff0c;完成数的相加。也就是实现参数的动态提交&#xff1a; 1.格式&#xff1a;rosrun xxxx xxxx 12 34 2.节点执行时候&#xff0c;需要获取命令中的参数&#xff0c;并且组织进 request 代码中应…...

React跨域解决方案

一、跨域日志报错 我们由于项目需要经常会需要对不同域名、不同子域的网站接口发起请求&#xff0c;有时甚至是对于同一域名的不同端口发起请求&#xff0c;此时我们经常看到以下报错&#xff1a; Access to XMLHttpRequest at xxx from origin xxx has been blocked by COR…...

内存五区的概念,内存池技术的诞生。

首先提出一道经典的面试题来引出今天的主角&#xff1a; 进程的虚拟空间分布是什么样的&#xff0c;全局变量放在哪里&#xff1f; 在数据初始化之后&#xff0c;全局变量放在.data段 在数据未初始化时&#xff0c;全局变量放在.bss段 内存五区 进程虚拟内存主要分为五个部分…...

力扣:字符串中的第一个唯一字符(C++实现)

题目部分&#xff1a; 解题思路&#xff1a; 方案一&#xff1a; 首先认真审题的小伙伴们一定会发现就是题目给了提示只包含小写字母&#xff0c;也就是说我们的排查范围是小写的26个字母。为了怕有的友友们一时短路想不起来&#xff0c;我就其按照顺序列出来吧。 即&#x…...

Phi-4-mini-reasoning真实案例:教育机构自动批题与答案生成应用

Phi-4-mini-reasoning真实案例&#xff1a;教育机构自动批题与答案生成应用 1. 教育场景中的智能批改需求 在教育培训行业&#xff0c;教师每天需要花费大量时间批改作业和试卷。传统的人工批改方式存在几个明显痛点&#xff1a; 时间成本高&#xff1a;一位数学老师批改50份…...

NVIDIA Profile Inspector 终极指南:免费解锁显卡隐藏性能的完整教程

NVIDIA Profile Inspector 终极指南&#xff1a;免费解锁显卡隐藏性能的完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让游戏画面更流畅、画质更清晰吗&#xff1f;NVIDIA Profile Inspe…...

2026年AI Agent将迎来爆发!这五大趋势将重塑企业未来,你准备好了吗?

2026年AI Agent将进入规模化部署阶段&#xff0c;应用渗透率将大幅提升。文章分析了五大核心趋势&#xff1a;多智能体协同、企业级部署规模化、行业垂直化、可信性与透明度提升&#xff0c;以及人机协作模式重构。同时&#xff0c;文章也提醒企业需警惕项目失败风险&#xff0…...

突破三维建模效率瓶颈:Blender对齐工具重新定义精准操作流程

突破三维建模效率瓶颈&#xff1a;Blender对齐工具重新定义精准操作流程 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap 在复杂的三维建…...

OpenCompass本地评测大模型实战指南(2025最新版)

1. 为什么你需要OpenCompass本地评测 最近两年大模型发展太快了&#xff0c;各种新模型层出不穷。作为开发者&#xff0c;你是不是经常遇到这样的困惑&#xff1a;这个新发布的模型到底效果如何&#xff1f;和之前用的模型相比优势在哪里&#xff1f;官方公布的benchmark数据靠…...

【数据结构】树的定义、核心术语与关键性质全解析

在数据结构的世界里&#xff0c;树&#xff08;Tree&#xff09; 是一种极其重要的非线性结构&#xff0c;它完美模拟了自然界中树的层次关系&#xff0c;从文件系统、组织结构&#xff0c;到算法中的二叉搜索树、堆&#xff0c;再到 AI 中的决策树&#xff0c;树的身影无处不在…...

从特效 SDK 到 AI 动效平台:Neon Vibe Motion 的技术演进之路

多媒体中台在 B 站主要负责剪辑、拍摄、直播等业务场景的动效渲染&#xff0c;开发维护的 SDK 在后文统一称为特效 SDK。 传统的视频特效生产一般分三条链路&#xff1a; 三条链路存在一个困境&#xff1a;效果丰富度、实时可交互、生产效率&#xff0c;三者不可兼得。 那么能…...

树莓派4B上跑YOLOv8n-NCNN,实测2FPS?别急,这有份从模型转换到C++代码的完整调优指南

树莓派4B上跑YOLOv8n-NCNN性能调优实战&#xff1a;从2FPS到流畅推理的完整指南 当你在树莓派4B上成功部署YOLOv8n-NCNN后&#xff0c;发现推理速度只有可怜的2FPS时&#xff0c;是否感到沮丧&#xff1f;别担心&#xff0c;这不是硬件性能的终点。本文将带你深入分析性能瓶颈&…...

抖音批量下载神器:免费一键收藏创作者全部作品

抖音批量下载神器&#xff1a;免费一键收藏创作者全部作品 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

CentOS部署PHP项目完整步骤

CentOS 7.9 部署 PHP 7.4 MySQL 5.7.44 完整步骤 由于 CentOS 7 已于 2024 年 6 月 30 日停止官方维护&#xff0c;原有的 yum 源已不可用&#xff0c;因此必须首先更换为阿里云镜像源才能正常安装软件。 一、系统环境准备 1.1 更换阿里云 YUM 源 # 1. 备份原有源 mv /etc/yum…...