MySQL知识点补充

1、去重 distinct

select distinct name,age from t1;
# 针对查找出来的结果整行(记录)进行去重,也就是相同行只保存一个

注意点:distinct 必须放在查询列的第一个(放后面就会报错)

2、保存操作记录 tee

tee D:a.txt;

可以把你对于MySQL的所有操作都记录到D盘下的a.txt中(包括一些报错信息)

pymysql包的基本用法

基本的查看

import pymysql
# 导入pymysql包
conn = pymysql.connect(host='localhost',user='root',password='',database='db1',charset='utf8')
# 连接mysql服务器,必须指定主机、用户、密码和你要使用的数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 实例化拿到光标对象,可以对服务器发送sql语句
# cursor=pymysql.cursors.DictCursor是为了让输出变成字典(列名与值对应),不设置的话就是元组
sql = 'select * from t1 where id > %s'% 1
# 写的sql语句不需要封号结尾,如果需要给sql语句传参,需要通过%s传值
cursor.execute(sql)
# 发送sql语句 cursor.fetchall()
cursor.fetchone()
cursor.fetchmany(2)
# 都是拿数据 fetchall拿全部,fetchone拿一个,fetchmany拿多个自己指定
cursor.close()
conn.close()
# 使用完关闭资源

sql注入

含义:

sql指的就是太相信用户的输入,没有对用户输入的参数进行转义,导致用户根据sql语法的特点完成对账号的破解

案例

sql = "select * from t1 where name = '%s' and pwd = '%s'"%(name,pwd)

# 例一:用户输入用户名时,输入heheh'#
# 这时得到的sql语句是
"select * from t1 where name = 'heheh'#' and pwd = '%s'"
# 在sql语句中 # 后面的语句是不执行的,所以就可以不输入密码轻松登录
# 例二:用户输入时输入 'asdsfa' or 1 = 1 #
# 这时得到的sql语句是
"select * from t1 where name = 'asdsfa' or 1 = 1 #' and pwd = '%s'"
# or在sql语句中是两边有一个正确就正确,也可以不输入密码登录成功

解决办法

1、自己手工对用户输入的值进行转义

2、使用execute() 自动进行过滤

# 插入一条数据
cursor.execute(sql,('hehhe',''))
# 插入多条可以通过一个列表装起来
data = [('head',''),
('name','pwd')]
cursor.executemany(sql,data)

事务*****

含义:

  事务指的是一组操作,要么都成功,要么都失败

特性

1、原子性

  一组操作,要么都成功,要么都失败

2、一致性

  指事务发生前后的数据总额不变

3、隔离性

  简单来说,指某个事物的操作对其他事物不可见

4、持久性

  当事务完成后,其影响是保存下来,不能撤销,只能通过开启另一个事务来抵消之前的错误

使用场景

当银行转账时,就需要用来事务,不然会发生一端钱刚扣,另一端还没增加就断电了,不加事务这钱就没了

加了事务,当这两个操作有一个没完成,那这两个都没完成。

代码

在mysql中创建事务方式

start transaction  #开启事务
(中间执行sql操作...)
commit # 提交上面的sql,让其生效 rollback # 回滚,撤回操作

ps:如果中间的sql语句中有drop表的操作,rollback就回不来了

在pymsql中

  在pymsql中本身就包含了事务的处理,不过需要我们手动提交commit 或者rollback才行

  连接mysql服务器的时候会有一个连接的返回值(连接对象)

  当我们要执行一些增加、修改、删除操作时,需要通过连接对象提交commit或者rollback才行

  当然,rollback时回滚,一般写在抓取到sql语句异常之后

pymsql及事务的更多相关文章

  1. 通过pymysql程序debug学习数据库事务、隔离级别

    问题 今天在使用pymysql连数据库的时候,出现了一个bug,查询数据库某个数据,但是在我在数据库中执行sql语句改变数据后,pymsql的查询依然没有发生改变. 代码如下: # 5.6.10 co ...

  2. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引

    本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...

  3. Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)

    主键的创建方式 1. create table stud( id int not null unique, name ) ); mysql> desc stud; +-------+------ ...

  4. mysql 视图 事务 索引

    为什么需要有视图 * 对于复杂的查询,往往是有多个数据表进行关联查询而得到,而这种语句往往比较复杂,也可能非常频繁的使用. 比如这样的SQL语句 select goods.name,goods_cat ...

  5. Python pymsql模块

    pymsql pymysql这款第三方库可以帮助我们利用python语言与mysql进行链接 基本使用 首先要下载pymysql pip install pymsql 以下是pymysql的基本使用 ...

  6. 38、mysql数据库(pymysql及事务)

    38.1.python之pymysql模块: 1.说明: pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 2.模块安装: pip install pym ...

  7. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  8. SQLServer事务同步下如何收缩日志

    事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...

  9. 事务日志已满,原因为“ACTIVE_TRANSACTION”

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列  http://www.cnblogs.com/dunitia ...

随机推荐

  1. Qt编写输入法V2019终极版

    一.前言 之前写过的V2018版本的输入法,本来已经很完善了,不打算更新升级了,最近有个朋友找我定制一个输入法,需要高仿一个苹果MAC电脑的输入法,MAC操作系统的审美无疑是相当棒的,于是乎直接拿以前 ...

  2. python根据数组数据绘图

    转载自网络,版权归原作者所有 hello3.txt文件内部数据如下 ......7,2,6,-12,-10,-7,-1,2,9,...... python脚本 import numpy as np i ...

  3. 【动手学深度学习】Jupyter notebook中 import mxnet出错

    问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活 ...

  4. 解决移动端1px的问题,设备像素比devicePixelRatio的应用

    本文主要针对移动端1物理像素问题展开 解决这个问题先要了解一下概念: CSS像素(CSS Pixel):(通俗说:样式中写的值)就是我们在样式代码中常写的逻辑像素,是一个抽象概念,实际并不存在 设备独 ...

  5. Python 动态规划算法

    背包问题 假设你是一个小偷,背一个可装4磅东西的背包.可盗窃的商品有如下3件: 音响,4磅,价值3000美元 笔记本电脑,3磅,价值2000美元 吉他,1磅,价值1500美元 为了让盗窃的商品价值最高 ...

  6. tomcat性能优化参数

    线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下: Linux内核的优化 服务器资源JVM 配置的优化 Tomcat参数 ...

  7. VUE-CLI项目同一局域网手机通过IP访问电脑本地项目

    0.找到config文件夹下的index.js文件,修改host内容为hots:'0.0.0.0',此时重新运行项目,则其他设备可以通过ip进行访问 1.首先确保电脑防火墙或者杀毒软件关闭,因为大多数 ...

  8. shell将txt转换为csv

    cat aa.txt | tr -s '[:blank:]' ',' > bb.csv

  9. 1、2 建立list(RestController),并postman测试

    1.主义实体类id   为String 类型(有用) @Entity(name = "t_student") public class Student { @Id private ...

  10. qt qml中的Tabview使用心得

    彩云之南的天是如此湛蓝,天上落下的水是如此清澈. 最近在qt5.5下使用TabView,如下. 1) currentIndex变量很好用,其对应当前被显示的tab,其值变化时还会触发onCurrent ...