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. Windows7 安装docker工具的方法

    1.参考官方文档 https://docs.docker.com/toolbox/toolbox_install_windows/ 注意:因为我的电脑是windows10 家庭版,所以,无法使用 Do ...

  2. python基础之面向对象(二)

    一点提醒 首先在使用pickle读取load时,需要先把使用到的类import上,否则会报错.在pycharm中使用时不会报错,但在linux或者cmd时就会报错!必须import. 报错提示: Fi ...

  3. scala的wordcount

    import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.SparkSession object Wo ...

  4. ubuntu 18.04下greenplum安装笔记(一)Linux下基础环境的搭建

    背景 需要构建一个用于数据仓库的分布式数据库集群. 每一个节点暂时不需要进行备份,同时也不考虑坏掉的情况. 每一个数据节点最好都不用进行过多的配置,安装起来方便. Greenplum的Shared-N ...

  5. python2.7 urllib和urllib2

    urllib模块url编码和解码: 1.urllib.quote,urllib.quote_plus ,urllib.unquote ,urllib.unquote_plus urllib.quote ...

  6. NASA HEG tool安装心得

    自从NASA对MRT工具停止支持后,这个工具的官网也随之打不开无法下载.处理数据当然还是需要官方的工具好一些. 现在NASA推荐使用HEG工具来处理MODIS系列产品,除此之外工具对ASTER, MI ...

  7. 帝国cms 批量替换语句

    UPDATE www_92game_net_cnys_ecms_caipu SET titlepic=REPLACE(titlepic,'http://file.92game.net', '') ; ...

  8. 《Tsinghua os mooc》第15~16讲 处理机调度

    第十五讲 处理机调度 进程调度时机 非抢占系统中,当前进程主动放弃CPU时发生调度,分为两种情况: 进程从运行状态切换到等待状态 进程被终结了 可抢占系统中,中断请求被服务例程响应完成时发生调度,也分 ...

  9. [转帖]两张图看懂GDT、GDTR、LDT、LDTR的关系

    两张图看懂GDT.GDTR.LDT.LDTR的关系 2018-06-09 18:13:53 Six_666A 阅读数 2044更多 分类专栏: 深入理解linux内核   转自:http://ju.o ...

  10. [转帖]linux bash环境变量简单总结

    linux bash环境变量简单总结 来源链接:http://www.178linux.com/8005 原创文章,如有转载,请注明原文地址 需要简单学习一下. 其实 我都是直接放一个 .sh文件到 ...