一:视图

1 视图是什么?     本质是一张虚拟的表,他的数据来自select语句  创建视图 create view test_view select *from t1;

2 有什么用?  原表安全  

 案例: 在一个公司中需要一张表保存所有人的薪资信息,这个表不是所有人都能看到,只有老板和财务可以,任何一个员工只能看到自己的信息,所以不能把整个表的信息开放给员工

 功能1:隐藏部分数据,开放指定的数据   功能2:因为视图可以将查询结果保存特性,可以用视图来达到减少书写sql的次数 案例:select *from emp where dept_id = (select id from dept where name = "市场"); 要查询市场的人 将调查结果作为一个视图,以后再使用到这个需求,就直接查看视图 对视图进行的查询

 3 如何使用? 创建视图:create view test_view as select *from t1;    特点: 1、每次对视图进行查询,其实都是再次执行了as后面的查询语句 2、可以对视图进行修改,修改会同步到原表 3、视图是永久存储的,存储的不是数据,就是一条as sql语句  

基本不用,因为你的程序开放的数据不是开放sql的语句,而开放的是查询结果

二:sql注入问题

sql注入攻击是什么意思?    一些了解sql语法的用户,可以输入一些关键字或合法sql来导致原始的sql逻辑发生变化,从而跳过登录验证或者删除数据库 如何避免在接受用户输入的数据发生变化,从而跳过登录验证或者删除数据库 上面这种方式只能避免,黑客从你的客户端软件注入sql但是无法避免中间人攻击(在客户端和服务器中间加一个中转服务器) 这样就绕过了客户端的输入限制,此时只能将sql合法性验证放在服务器端

总结:Python如何避免sql注入?把自己的sql(用户输入的)参数放execute函数的arg参数中,让pymysql自动帮你屏蔽注入攻击 

#自己的理解客户端发给数据库服务器经过路由器, 然后被中间人截获客户端发的个人信息, 比如说,本来客户端的密码是123, 然后被中间人截获后将密码改成321再发送给服务端,笼统的讲,就是你有一个快递, 本来是拿了快递后直接打包发给你, 但是这时候出现一个中间人,他拿了你的快递, 发现是个好东西,然后自己拿走,再放个别的东西寄给你,

三:事务

生活中的事务,你可以理解为事情,一件事情要完成通常不可能一步到位,需要拆分多个小步骤   举例 请你帮我买水    1、给你钱2、你去买水3、你给钱4、拿水找钱5、把水给我

在mysql中,事务是什么? 是一组sql语句集合 事务的特性1、原子性 事务是一个整体,不可分割

2、隔离性 事务之间要相互隔离,避免导致数据错乱,为了维护数据完整性: 举例: 你有一张银行卡,第一次查看余额发现有1000元就开开心心买东西去了,买完东西回来付钱,再一查发现余额不足 ,原来你在第一次查询后,你的媳妇把钱转走了

 这个问题称为不可重复读,如何避免? 当我在查的时候你不能修改,查询和修改不能同时进行

 因为并发访问,导致的一些问题1、脏读 一个事务读到了另一个事务未提交的数据,查询之前要保证所有的更新都已经完成2、幻读 一个查询事务没有结束时,数据被另一个事务执行insert delete 3、不可重复读 一个事物在查询另一个事务在update

  四种隔离级别 读未提交 读已提交 可重复读 默认 串行化

3、一致性 当事务执行后 所有的数据都是完整的(外键约束 非空约束)

 4、持久性 一旦事务提交 数据就永久保存 强调:事务就是一堆sql语句的集合 他们是原子性的要么全部指向性 要么都不执行

mysql这个客户端 默认 开启自动提交,一条sql语句就是一个单独的事务pymysql 默认|是不自动提交,需要手动commit 意思是默认就开启了事务

 事务需要掌握的就是start transaction 开启一个事物commit 提交事物rollback 回滚事务

四:存储过程

存储过程是什么?     你可以理解为mysql的编程     为什么有了Python还要学习这种编程语言?

作用:可以将你的程序业务逻辑放到mysql中来处理,这样可以降低网络访问次数,从而提高你的程序效率

既然如此,能不能把所有与数据存储相关的业务逻辑全都放到mysql中?     在技术面前:能     但是对于公司而言,需要再请一个mysql开发者,对于你个人来说,提高沟通成本,比如说意见上的不统一三种开发的模型 对于同一个业务,你可以放到Python也可以放到mysql,有什么区别?1、应用程序,处理逻辑 需要手动编写sql语句 优点:执行效率高 缺点:开发效率低mysql  2、应用程序mysql 处理逻辑 特点:应用程序开发者不需要手动编写sql语句mysql开发者来编写 优点:应用程序开发效率高 缺点:执行效率偏低,沟通成本增加

3、使用ORM(object relation map) 对象关系映射 自动帮你生成对应的sql语句,比如说,你要注册用户, 本来要写insert语句,现在使用orm调用save(用户对象) 优点:开发效率高 缺点:执行效率降低

 存储过程相当于Python中的一个函数,简单的说,学习存储过程就是学习如何使用mysql编写一个函数

 语法:create procdure 过程的名称({in,out,inout} 数据类型 参数名称) begin 具体的sql代码end数据 参数前面需要指定参数的作用in 表示该函数用于传入数据out 用于返回数据inout 可传入,也可返回

 参数类型是mysql中的数据类型

案例一:创建一个存储过程,作用是将两个整数相加create procedure add_p (in a int,in b int)beginselect a + b;end//

案例一:

调用 call add_p(1,2)

案例二:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中定义一个变量set @su = 100;create procedure add_p2 (in a int,in b int,out su int)beginset su = a + b;end//

案例二:

定义变量 set @su = 100;调用过程 call  add_p2(10,20,@su);     注意:在存储过程中,需要使用分号来结束一行,但分号有特殊含义,得将原始的结束符,修改为其他符号delimiter // 结束符更换为 // delimiter;

  mysql中的if语句if条件then 代码

elseif 条件 then 代码

else then 代码

end if;

案例三:使用存储过程完成输入一个数字1或2,显示:壹 或 贰create procedure show_p (in a int)beginif a = 1 thenselect "壹";elseif a = 2 thenselect "贰";elseselect "other";end if;end //

案例三:

调用存储过程,使用call过程名称call abb_p(10,20); 其他的流程控制switchcase while repeat == do while

总结:实际上一个mysql中的类似函数的东西,我们可以用它实现一些逻辑处理特点:里面可以包含流程控制语句和普通的sql语句

使用存储过程的优势 提高应用程序开放效率 降低网络访问次数

转载于:https://www.cnblogs.com/zedong/p/9670828.html

Python 43 视图 、sql注入问题 、事务 、存储过程相关推荐

  1. Sqlmap速查表/功能移植/Python批量检测SQL注入

    title: Sqlmap速查表与Python进行功能移植 copyright: true top: 0 date: 2021-02-27 11:59:00 tags: [扫描注入,注入,sqlmap ...

  2. Python如何防止sql注入

    前言 web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题.那么在Python web开发的过程中sql注入是怎么出现的呢,又是怎么 ...

  3. JDBC(本质,配置环境变量,JDBC编程六步,类加载注册,sql注入,事务问题,封装工具类,悲观锁,乐观锁)

    JDBC 2021.5.21 依然跟着动力节点杜老师学!!! 1.什么是JDBC? Java DataBase Connectivity 在java语言中编写sql语句,对mysql数据库中的数据进行 ...

  4. JDBC从入门到熟练使用——功能类详解、增删改查(CRUD)、sql注入、事务、连接池

    一.JDBC入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问 ...

  5. python 打造一个sql注入脚本 (一)

    0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...

  6. 逆袭之路——python 操作数据库、SQL注入问题、索引与慢查询优化【day49】

    今日内容概要 python操作MySQL SQL注入问题 修改表SQL语句补充 视图.触发器.存储过程 事务 流程控制.函数 索引与慢查询优化 今日内容详细 一.python操作MySQL pytho ...

  7. sql注入,预编译和事务

    sql注入: 事务: 转载于:https://www.cnblogs.com/Girlir/p/7604445.html

  8. python sql注入如何防止_Python如何防止sql注入

    Python如何防止sql注入.web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题. 那么在Python web开发的过程中sql ...

  9. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  10. java持久层框架mybatis如何防止sql注入

    2019独角兽企业重金招聘Python工程师标准>>> sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如"or ...

最新文章

  1. 撩妹学会这一招,就没有人能拒绝你!
  2. Java BigInteger类| isProbablePrime()方法与示例
  3. VScode配置java开发环境
  4. h0152. 故事计算题(计蒜客——西邮K题)解析
  5. python追加写入数据到excel表格
  6. CodeSnippet.info 开源说明 和 环境搭建 (第一版)
  7. Web接入QQ登陆简单入门操作
  8. 网卡驱动DM9000-基于uboot
  9. Little Elephant and Magic Square
  10. 安全生产危化品生产单位安全管理人员一[安考星]
  11. 黑马瑞吉外卖项目开发笔记
  12. 华为ar系列交换机虚拟服务器,交换机路由器虚拟服务器设置
  13. 利用dsp电机测速及详解
  14. C语言中 srand()函数和rand()函数
  15. Python全栈-magedu-2018-笔记13
  16. python+webdriver学习鼠标键盘事件以及定位元素
  17. app拉新渠道统计如何跟踪?
  18. reduce()的基本用法
  19. 详解scp文件传输(使用ssh服务,无须反复输入密码)(可用于服务器和本地电脑的文件传输)
  20. 第三届“中科实数杯”团队赛wp

热门文章

  1. 导出jar包和api文档
  2. java中常用的类——Math类
  3. 物联网空开价格_北斗星C2物联网蒸箱集成灶618价格提前开抢,转发送豪礼
  4. HIVE 命令行操作和参数指引
  5. 关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码
  6. 读过的书,记录一下,不要忘记提高自己
  7. JAVA Web基础3-Servlet
  8. mysql8.0.11-1 修改密码报错
  9. href 和 src 区别
  10. python之OrderedDict类