一、存储过程:

优点:只要传很少的数据到数据库就可以了   缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句。

二、创建存储过程:

1、简单

创建存储过程:

Python中使用结果集:

 #
import pymysql #查
conn = pymysql.connect(host="localhost",user='root',password='',database="db5",charset='utf8')
#游标
cursor = conn.cursor()
#连接数据库成功 10 #执行存储过程
11 cursor.callproc('p1')
conn.commit() #获取结果集
result = cursor.fetchall()
print(result) #关闭数据库
cursor.close()
conn.close()

2,传参数:(in,out,inout三个关键字)

创建存储过程:

直接在mysql数据库中调用并传参:

python中调用并传参:

 import pymysql

 #查
conn = pymysql.connect(host="localhost",user='root',password='',database="db5",charset='utf8')
#游标
cursor = conn.cursor()
#连接数据库成功 #执行存储过程
cursor.callproc('p2',(12,2))
conn.commit() #获取结果集
result = cursor.fetchall()
print(result) #关闭数据库
cursor.close()
conn.close()

运行结果:

3、参数 out

python中的参数out:

 import pymysql

 #查
conn = pymysql.connect(host="localhost",user='root',password='',database="db5",charset='utf8')
#游标
cursor = conn.cursor()
#连接数据库成功 #执行存储过程
cursor.callproc('p3',(12,2))
#获取结果集
r1 = cursor.fetchall()
print(r1) 16 #拿存储过程out回来的结果集
17 #@_p3_0表示查询p3的第个参数,@_p3_1表示第二个参数
18 cursor.execute('select @_p3_0,@_p3_1')
19 #获取结果集
20 r2 = cursor.fetchall()
21 print(r2) #关闭数据库
cursor.close()
conn.close()

4,参数inout:inout即能往里面传值也能往外面传值

比如 out n2 int;set @v1=10;给n2传了一个值10,假设有print的时候(没有print),当print (n2)的时候是没有值的,而intout n2 int的时候print (n2)是有值的。

5,事务(其中一个出错就回滚到原来的状态)

例1:

6,游标(不常用,银行中的数据要进行分门别类进行计算的时候才要用到游标,能不用游标就不用游标)

7,动态执行sql(防sql注入)

三、总结:

为什么有结果集又有out伪造的返回值?

Python--day46--mysql存储过程(不常用)(包含防sql注入)的更多相关文章

  1. mysql存储过程及常用函数

    原文:mysql存储过程及常用函数 一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取 ...

  2. Python 执行 mysql 存储过程

    mysql 创建简单的临时表 tmp create database test; use test; DROP TABLE IF EXISTS `tmp`; CREATE TABLE `tmp` ( ...

  3. mysql之数据库连接的方法封装及防sql注入

    一.定义数据库和表 create database animal; CREATE TABLE `pet` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name ...

  4. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  5. PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO(PDO一是PHP数据对象(PHP Data Object)的缩写),可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_ ...

  6. 防SQL注入:生成参数化的通用分页查询语句

    原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...

  7. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  8. golang 防SQL注入 基于反射、TAG标记实现的不定参数检查器

    收到一个任务,所有http的handler要对入参检查,防止SQL注入.刚开始笨笨的,打算为所有的结构体写一个方法,后来统计了下,要写几十上百,随着业务增加,以后还会重复这个无脑力的机械劳作.想想就l ...

  9. .Net防sql注入的方法总结

    #防sql注入的常用方法: 1.服务端对前端传过来的参数值进行类型验证: 2.服务端执行sql,使用参数化传值,而不要使用sql字符串拼接: 3.服务端对前端传过来的数据进行sql关键词过来与检测: ...

随机推荐

  1. Directx11教程(8) 一个新的camera类

    原文:Directx11教程(8) 一个新的camera类      本章我们将替换掉CameraClass类,实现一个稍微靠谱点的摄像机类.并通过Q,W,E,A,S,D,Z,X,C等按键实现摄像机的 ...

  2. node 写的简单爬虫(一)

    安装cheerio npm install cheerio --save 引入http和cheeri var http=require("http"); var cheerio=r ...

  3. H5视频播放自动全屏,暂停退出全屏等功能

    html5视频播放自动全屏,暂停退出全屏等功能 在参考了html5 video fullScreen全屏实现方式及司徒正美的书<javascript框架设计>287页相关代码后,在Safa ...

  4. SpringMVC的简单传值总结

    之前学习SpringMVC时感觉他的传值很神奇:简便,快捷,高效. 今天写几个简单的传值与大家分享,希望能对大家有帮助. 一. 从后往前传: (1) @Controller @RequestMappi ...

  5. Oracle 11g Pivot函数实现行转列

    先上语法规范: SELECT .... FROM <table-expr> PIVOT ( aggregate-function(<column>) FOR <pivot ...

  6. 用Sketch和PaintCode快速得到绘制代码

    http://www.cocoachina.com/ios/20150901/13155.html 作者:codeGlider 授权本站转载. 在我的上一篇文章中 swift10分钟实现炫酷的导航控制 ...

  7. ArcGIS 发布高程服务。10.4

    ArcGIS 发布高程必须是10.21以上,我用10.4. 前端用ArcGIS For API 4.x. ARCGIS很早之前有CS版本的ArcScene,可查看高程TIF文件,但机制和BS的完全不同 ...

  8. spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理

    背景: 1.系统采用SSM架构.需要在10多个MYSQL数据库之间进行切换并对数据进行操作,上篇博文<springMVC+Mybatis(使用AbstractRoutingDataSource实 ...

  9. CENTOS7安装R语言环境

    CENTOS7安装R语言环境 yum install texinfo.x86_64 yum install texlive.x86_64 cd /opt wget https://mirrors.tu ...

  10. MyEclipse2016项目内复制一个项目,如何更改项目的访问路径

    在MyEclipse2010版本如果复制了一个项目,需要改项目的访问路径的话,可以选中项目右键,点开Properties,在顶部搜索web,就会出现如下内容,这是只需要在里面更改路径就可以了. 而在2 ...