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. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_17-认证接口开发-申请令牌测试

    远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1   -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestCl ...

  2. SpringCloud学习成长之路 六 cloud配置中心

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  3. 在Vue中用富文本编辑器(可以ctrl+c粘贴)

    我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...

  4. 集合循环删除问题-报错java.util.ConcurrentModificationException解析

    java.util.ConcurrentModificationException 异常问题详解 环境:JDK 1.8.0_111 在Java开发过程中,使用iterator遍历集合的同时对集合进行修 ...

  5. 导出 VuePress构建的网站为 PDF

    前言 学 Rust 也有一段时间了,网上也有不少官方文档的中文翻译版,但是似乎只有 Rust中文网站 文档一直是最新的,奈何并没有 PDF 供直接下载,是在是不太方便,为了方便阅读以及方便后续文档更新 ...

  6. LeetCode_53. Maximum Subarray

    53. Maximum Subarray Easy Given an integer array nums, find the contiguous subarray (containing at l ...

  7. 微信小程序企业付款到个人

    <?php /** * 小程序之企业付款到个人! */ class WxPayModel extends Model { public function sendMoneyToPerson($t ...

  8. 做了一个非竞价排名、有较详细信息的程序员职位 match 网站

    作为一个程序员,每次看机会当我去 BOSS 直聘 或者拉勾网进行搜索时,返回的顺序并不是根据匹配程度,而是这些公司给 BOSS 直聘或者拉勾网付了多少钱.这种百度式的竞价排名机制并没有把我做为求职者的 ...

  9. 51.Qt-使用ajax获取ashx接口的post数据

    由于当前C++项目需要使用ajax库去post调用ashx接口,接口地址如下所示: 需要传递的参数如下: 然后发现qml比较好调用ajax.js库,所以本章通过C++界面去获取qml方法来实现调用as ...

  10. Quartz.Net入门 - Net作业调度

    背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...