python操作MySQL,SQL注入问题,视图,触发器,事务,存储过程,内置函数,流程控制,索引

news2024/12/26 11:28:24

一、python操作MySQL

导入第三方模块:pymysql

操作步骤(文字描述):

        1. 先链接MySQL

                host,port,username,password,charset,库,autocommit等

        2. 在python中书写SQL语句

        3. 开始执行SQL语句,拿到结果

        4. 在python中做处理(对数据做进一步处理)

 

代码实现:

# 1. 链接mysql
con=mysql.connect(
    host='127.0.0.1',
    port='3306',
    user='root',
    password='1234',
    charset='utf8',
    db='db5',
    autocommit=True
)

# 2. 获取光标
cursor=con.cursor()

# 3. 写SQL语句
sql = 'select*from class'

# 4. 执行SQL语句
e = sursor.execute(sql)

# 5. 打印SQL语句结果
res = cursor.fetchone()    # fetchone拿到第一条数据
print(res)
res1 = cursor.fetchall()    # fetchall拿到全部数据
print(res1)
res2 = cursor.fetchmany(2)    # fetchmany(2)拿到前两条数据
print(res2)

二、SQL注入问题

1. SQL注入原因:

        是由于特殊符号的组合会产生特殊的效果

2. 结论:设计到敏感数据部分,不要自己拼接,交给线程的方法(execute)拼接即可

3. 注意事项:

        在使用代码进行数据操作时,不同操作的级别是不一样的,查无所谓,针对增,改,删都需要二次确认 ------conn.commit(),还可以在连接mysql时autocommit=True,加了这句后,以后就不用再写conn.commit()了

三、视图

        1 、什么是视图

           视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用

        2、为什么要用视图

如果要频繁的使用一张虚拟表,可以不用重复写SQL语句查询

        3、如何用视图

        用法:create view 视图名 as 查询的SQL语句

create view info as select*from teacher inner join course on teacher.tid=course.teacher_id;

创建好了之后,验证它的存在Navicat验证,cmd终端验证,最后文件验证,

结论:视图只有表结构数据还是来源于之前的表

 

删除视图:drop view 视图名;

 

视图只有表结构文件,没有表数据文件

视图一般用于查询,不要轻易修改视图中的数据

四、触发器

        1、什么是触发器

           在满足对某张表数据的增,删,该的情况下,自动触发的功能称之为触发器

        2、为何要使用触发器

           触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类语法一旦执行就会触发触发器的执行,即自动运行另外一段SQL代码

        3、创建触发器语法

语法结构:

        create trigger 触发器的名字 before/after/ insert/update/delete on 表名 for each row

         begin

                sql语句

        end

代码演示:

# 针对插入
create tigger tri_after_insert_t1 after insert on 表名 for each row
begin 
    sql代码
end

# 针对删除
create trigger tri_after_delete_t1 delete on 表名 for each row
begin
    sql代码
end

# 针对修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
    sql代码
end

注意事项:

        在书写SQL代码的是否结束符是;而整个触发器的结束也需要分号,这就会出现语法冲突,我们需要临时修改结束符号    delimiter  修改的符号(delimiter $$)  该语法只在当前窗口有效

五、事务

        1、什么是事务

               开启一个事务可以包含一些SQL语句,这些SQL语句要么同时成功要么同时失败

        2、事务的作用

                保证了对数据操作的数据安全性

        3、事务的四个属性

        1. 原子性:一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么都做要么都不做

        

        2. 一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性和原子性是密切相关的

 

        3. 隔离性:一个事务的执行不能被其他事物干扰。即一个事务内部的操作及使用的数据对并发的其他事物是隔离的,并发执行的各个事物之间不能有干扰

 

        4. 持久性:持久性也称永久性,指一个失误事物一旦提交,它对数据库中的数据的改变就是永久性的,接下来的其他操作或故障就不应该对其有任何影响

        4、如何使用

'''
事物的3个关键字:

    starttransaction;
    commit
    rollback
    
'''

create table t1(
    id int primary key auto_increment,
    name char(32),
    balance int
);

insert into t1(name,balance) values('jason',1000),('engo',1000),('jack',1000);


# 修改数据之前先开启事物
start transaction;

# 修改操作
update t1 set balance=900 where name='jason';
update t1 set balance=900 where name='engo';
update t1 set balance=900 where name='jack';

rollback;    # 回滚到上一个状态

# 开启事物之后,只要还没有执行commit操作,数据其实都还没有刷新到硬盘,也就是锁说上线的修改还没成功
commit;
'''开启事物检测完整就执行commit不完整就执行rollback回滚到上一个状态,执行完commit操作之后,就不能在修改了'''

六、存储过程

        1、什么是存储过程

        存储过程包含了一系列可执行的SQL语句,存储过程存放于MySQL中,通过调用他的名字可以执行它内部的一堆sql,类似python中的自定义函数

        2、基本使用

# 前提:存储过程在哪个库下创建的就只能在对应的库下操作

create procedure p1()
begin
    select*from user;
end


# 调用
call p1()


# 在python程序中调用
pymysql链接mysql
产生的游表cursor,callproc()
cursor.execute()


# MySQL中提前定义变量:set @变量名=变量值
# 查看变量名:select @变量名
# 调用:call 表名(参数)

七、函数

前提:mysql内置函数只能在sql语句中使用

create table blog(
    id int primary key auto_increment,
    name varchar(32),
    sub_time datatime
);

insert into blog(name,sub_time) values('第1篇','2012-12-11 11:11:11'),('第1篇','2013-10-11 11:11:11'),('第1篇','2014-09-11 11:11:11');


# 将年月日时分秒格式变成年月格式
select data_format(sub_time,"%Y-%m"),count(id) from group by data_format(sub_time,"%Y-%m");

八、索引(重点)

       1、什么是索引

索引是一种数据结构,也叫做"键",是存储引擎用于快速找到记录的一种数据结构

索引有:

        primary key----------可以加快查询速度,还有约束作用

        unique key-----------可以加快查询速度,还有约束作用

        index key-------------可以加快查询速度,没有约束作用

        2、索引的本质

就通过不断的缩小搜索的范围,来筛选出最终想要的结果,同时把随机事件变成顺序事件,也就是说有了这种索引机制,我们可以总使用同一种查找方式来锁定数据

        3、索引的影响

1. 在表中有大量数据的前提下,创建索引的速度会很慢(建表的时候,如果明显需要索引就提前加上)

 

2. 在索引创建完毕后,对表的查询性能会大幅度提升,但是写的性能会降低

         b + 树

        叶子节点存放真实数据,树干和树枝节点存放的是虚拟数据

        

        4、聚集索引(primay key)

 聚集索引其实指的就是表的主键

 

        特点:叶子结点放的一条条完整的记录

        5、辅助索引(unique key    index key)

        辅助索引:查询数据的时候不可能都是用id作为筛选条件,也可能会用name,password等字段信息,那么这个时候就无法利用聚集索引的加速查询效果。就需要给其它字段建立索引,这些索引就是辅助索引

 

         特点:叶子结点存放的是辅助索引字段对应的那条记录的主键的值

 

 select name from user where name='jack';

上述语句叫覆盖索引:只在辅助索引的叶子结点中就已经找到了所有我们想要的数据

 

 select age from user where name='jack';

上述语句叫非覆盖索引,虽然查询的时候命中了索引字段name,但是要查的是age字段,所以还需要利用主键查找

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06条件判断

if语句的基本语法 if关键字后面跟一个判断条件 如果条件成立那么就运行判断条件里面的代码 else处理条件不满足时候的代码块 m 9 if m > 10:print("买一瓶醋") else:print("钱不够,请带够钱再来吧!")#条件判断流程图 进入网…

stream流—关于Collectors.toMap使用详解

目录 使用规则&#xff1a;1.将list转成以id为key的map&#xff0c;value是id对应的某对象2.假如id存在重复值&#xff0c;则会报错Duplicate key xxx3.想获得一个id和name对应的Map<String, String>3.1 name为空时null3.2 id重复时 4.分组 使用groupingby 使用规则&…

系列二十五、@Configuration的作用及解析原理

一、作用 Configuration是用来代替传统的xml的配置方式配置bean的。 二、不加Configuration注解不能配置bean吗 能。 三、加与不加的区别 3.1、区别 加了Configuration注解&#xff0c;会为配置类创建cglib动态代理&#xff0c;Bean方法的调用就会通过容器getBean进行获取…

面试准备中........

一、Linux 计算机网络相关&#xff1a; 1.OSI七层模型 应用层 &#xff1a;给用户提供操作界面 表示层&#xff1a;数据的表示&#xff1a;将字符转化为2进制或将2进制转化为字符。加密&#xff1a;对称加密和非对称加密&#xff0c;ssh协议。压缩&#xff1a;将文件压缩。…

C# 图解教程 第5版 —— 第12章 枚举

文章目录 12.1 枚举12.1.1 设置底层类型和显式值12.1.2 隐式成员编号 12.2 位标志12.2.1 Flags 特性12.2.2 使用位标志的示例&#xff08;*&#xff09; 12.3 关于枚举的更多内容 12.1 枚举 枚举是值类型。只有一种类型的成员&#xff1a;命名的整数值常量。 每个枚举成员都被…

VS工程的“多dll与exe文件合并”

运行环境 ILMerge插件 1、打开 VS的“工具 - NuGet包管理器 - 管理解决方案的NuGet程序包” 2、在浏览中搜索“ILMerge”&#xff0c;在官方源中&#xff0c;3.0.41版本的插件已不支持使用了 3、下拉列表其他版本可以安装&#xff0c;使用3.0.40 4、下载封装好的“ILMerge”任…

Kotlin基础——变量、函数、字符串模板、类

变量 Kotlin和Java一样是静态语言&#xff0c;所有表达式类型在编译期已经确定&#xff0c;public为默认可见性 变量由 var/val变量名[: 数据类型][?][ 值] 组成&#xff0c;如 var a 1var b: Int b 3var s: String? nullval language arrayListOf("java")…

Kmeans算法的K值选择技巧【Elbow Method + Silhouette Score Method】

文章目录 一、方法简述二、使用到的数据集三、代码实现四、结论 一、方法简述 在Kmeans算法中最终聚类数量K的选择主要通过两个方法综合判断&#xff1a; Elbow Method 这是一种绘制k值范围的平方和的方法。如果此图看起来像一只手臂&#xff0c;则k是选择的类似肘部的值。从这…

走进人工智能的大门:打造职业梦想的契机

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;不再是科幻小说的情节&#xff0c;而是我们现实生活和职业生涯中的现实部分。从自动驾驶汽车到智能助手&#xff0c;AI 的影响已经渗透到各个领域。而中国&#xff0c;作为全球人工智能市场的重要一员&#xff…

HTML简单实现v-if与v-for与v-model

Vue启动&#xff01;&#xff01; 首先VIewModel将View和Model连接一起&#xff0c;Model的数据改变View的数据也变 使用Visual Studio Code 启动Vue需要vue.js插件和导入CDN(包) vue.js插件&#xff1a;CTRL shift x 在搜索栏搜 索vue.js安装即可 CDN&#xff1a; http…

利用HTTP2,新型DDoS攻击峰值破纪录

亚马逊、Cloudflare 和谷歌周二联合发布消息称&#xff0c;一种依赖于 HTTP/2 快速重置技术的攻击行为对它们造成了破纪录的分布式拒绝服务 (DDoS) 攻击。 根据披露的信息&#xff0c;该攻击自8月下旬以来便一直存在&#xff0c;所利用的漏洞被跟踪为CVE-2023-44487&#xff0c…

花园这样去装,让户外空间更上一个层次

花园这样去装&#xff0c;让户外空间更上一个层次 园林设计师马修-布罗姆利&#xff08;Matthew Bromley&#xff09;说&#xff1a;”我深受法国和英国花园传统的影响&#xff0c;而这些客户想要的是一个能让人回想起在法国南部迷人的凉棚下度过的时光的空间。斑驳的树荫、燃烧…

关于Web应用和容器的指纹收集以及自动化软件的制作

一次对Web应用的渗透&#xff0c;九成都是从信息收集开始&#xff0c;所以信息收集就显得尤为重要。关键信息的收集可以使你在后期渗透的时候更加的得心应手&#xff0c;把渗透比喻成走黑暗迷宫的话&#xff0c;那信息收集可以帮你点亮迷宫的大部分地图。 信息收集涉及的点特别…

[Leetcode] 0094. 二叉树的中序遍历

94. 二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&…

现代风格设计,大美至简!福州中宅装饰,福州装修

风格&#xff1a;现代 面积&#xff1a;70m 户型&#xff1a;住宅 现代风格设计是较为流行的风格 注重家居空间的布局与使用功能的结合 追求时尚和潮流 客厅空间 简约风格已经成为装修的一种流行趋势 讲究以简洁的视觉制造出简单的风格 客厅的空间整体户型 是纵向客餐厅…

【Python】一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格

题目要求&#xff1a;一个句子中也许有多个连续空格&#xff0c;过滤掉多余的空格&#xff0c;只留下一个空格 例&#xff1a;&#xff08;为了方便观看&#xff0c;以 ▢ 代替空格&#xff09; 输入&#xff1a;123▢▢abc▢▢▢python 输出&#xff1a;123▢abc▢python 参考…

vue源码分析(五)——vue render 函数的使用

文章目录 前言一、render函数1、render函数是什么&#xff1f; 二、render 源码分析1.执行initRender方法2.vm._c 和 vm.$createElement 调用 createElement 方法详解&#xff08;1&#xff09;区别&#xff08;2&#xff09;代码 3、原型上的_render方法&#xff08;1&#xf…

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥&#xff1f;Spring Boot 不用&#xff1f;——对。就只是使用 Spring MVC Embedded Tomcat&#xff0c;而不用 Boot。为啥&#xff1f;——因为 Boot 太重了&#xff1a;&#xff09; 那是反智吗&#xff1f;Spring Boot 好好的就只是因为太重就不用&#xff1f;——稍安勿…

EfficientViT:高分辨率密集预测的多尺度线性关注

标题&#xff1a;EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction 论文&#xff1a;https://arxiv.org/abs/2205.14756 中文版&#xff1a;【读点论文】EfficientViT: Enhanced Linear Attention for High-Resolution Low-Computation将soft…

Betaflight关于STM32F405 SBUS协议兼容硬件电气特性问题

Betaflight关于STM32F405 SBUS协议兼容硬件电气特性问题 1. 源由2. 储备知识2.1 三态逻辑(Tri-state Logic)2.1 上拉 (Pull-up)2.2 下拉 (Pull-down)2.3 Current Sink2.4 Current Source2.5 GPIO输入模式2.6 GPIO输出模式 3. FPV系统协议简介3.1 TX Protocols – communication…