38.1、python之pymysql模块:

1、说明:

pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同。

2、模块安装:

pip install pymysql

3、在pycharm中添加pymysql模块:

File——>settings——>Project:python——>Project Interpreter——>点击"+"——>输入pymysql——>Install Package

4、执行sql语句:

import pymysql

#导入pymysql模块

conn =pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="lc2", charset="utf8")

#连接数据库

cursor = conn.cursor()

#得到数据库游标对象

#创建表

# create_table_employee = """CREATE TABLE EMPLOYEE(

# id INT primary key AUTO_INCREMENT,

# FIRST_NAME CHAR(20) NOT NULL unique,

# LAST_NAME CHAR(20),

# AGE INT,

# SEX CHAR(1),

# INCOME FLOAT)"""

# create_table_employee_result=cursor.execute(create_table_employee)

# print(create_table_employee_result)

# 创建表成功后返回0,创建失败报错

#插入数据

# insert_sql="INSERT INTO employee(id,first_name,last_name,age,sex,income)" \

# "values(1,'汤姆猫','tom',2,'男',1995),(2,'杰瑞鼠','jierui','2','男',1995)"

# insert_sql_result=cursor.execute(insert_sql)

# print(insert_sql_result)

# 插入成功后返回插入记录的条数,插入失败报错

# print(cursor.lastrowid)

#在插入语句后查看获取插入的最后一条数据的自增ID

# 更新数据

# update_sql="update employee set sex='女' where LAST_NAME='jierui'"

# update_sql_result=cursor.execute(update_sql)

# print(update_sql_result)

# 更新成功后返回插入记录的条数,更新失败报错,没有更新记录返回0

# 查询数据

query_sql = "select * from employee"

query_sql_result=cursor.execute(query_sql)

# print(query_sql_result)

# 查询成功后返回记录的条数,等价于select count(*) from employee,查询失败报错

query_sql_one = cursor.fetchone()

print(query_sql_one)

# 获取一条记录(row),返回单层元组,如果没有结果则返回None

# (1, '汤姆猫', 'tom', 2, '男', 1995.0)

# query_sql_many=cursor.fetchmany(1)

# print(query_sql_many)

# 获取指定条记录(row),返回双层元组,如果没有结果则返回()

# ((1, '汤姆猫', 'tom', 2, '男', 1995.0),)

# query_sql_all=cursor.fetchall()

# print(query_sql_all)

# 返回多条记录(rows),返回双层元组,如果没有结果则返回()

# ((1, '汤姆猫', 'tom', 2, '男', 1995.0), (2, '杰瑞鼠', 'jierui', 2, '女', 1995.0))

# 更改数据库游标对象的位置

# cursor.scroll(-1,mode='relative')

# 相对当前位置移动

# cursor.scroll(2,mode='absolute')

# 相对绝对位置移动

conn.commit()

#提交事物

cursor.close()

#关闭mysql游标对象

conn.close()

#关闭和mysql的连接

38.2、事物:

1、事物命令:

(1)事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。

(2)数据库开启事务命令:

1)说明:

数据库事务起始于SQL语句,终止于以下4种事件之一,事务结束后,下一条SQL语句将开始一

个新的事务。

A、COMMIT或ROLLBACK语句。

B、DDL(创建/删除视图、触发器、存储过程、自定义函数、索引,修改表结构)/DCL(用户赋权或减权)隐式提交。

C、用户退出时自动提交。

D、系统强行关闭时取消事务。

2)start transaction:开启事务。

PS:

设置不自动提交(commit)也是开启了事务,mysql默认是自动提交事务,oracle默认是不自动提交事务。

pymysql模块自动开启了不自动提交。

在不同的连接(session)下,使用'commit;'是相互不影响的。

3)Rollback:回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚

到上一次commit的位置。

4)Commit:提交事务,提交未存储的事务。

5)savepoint:保留点,事务处理中设置的临时占位符,你可以对它发布回退(与整个事务回

退不同),回退到更早的点就不能回退到最近的点了。

savepoint delete1;

--创建保留点

rollback to delete1;

--还原保留

commit;

--提交事务

(3)转账实例:

UPDATE account set balance=balance-5000 WHERE name="lc1";

UPDATE account set balance=balance+5000 WHERE name="lc2";

(4)python中调用数据库启动事物的方式:

1)创建试验表和所需要的数据:

--创建表

CREATE TABLE ACCOUNT(

id INT primary key AUTO_INCREMENT,

NAME CHAR(20) NOT NULL unique,

salary FLOAT);

--插入数据

INSERT INTO ACCOUNT(id,name,salary) values(1,'tom',1000),(2,'jack',2000);

--查询数据

select * from account;

2)代码:

import pymysql

try:

conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="lc2", charset="utf8")

cursor = conn.cursor()

insertSQL0 = "INSERT INTO ACCOUNT (name,salary) VALUES ('lc',3000)"

insertSQL1 = "UPDATE account set salary=salary-30 WHERE name='tom'"

insertSQL2 = "UPDATE account set salary=salary+30 WHERE name='jack'"

cursor.execute(insertSQL0)

conn.commit()

# insertSQL0是一个事务,事务完成就提交。

cursor.execute(insertSQL1)

raise Exception

# insertSQL1抛出异常,下面的内容都不再执行。

cursor.execute(insertSQL2)

conn.commit()

# insertSQL1和insertSQL2加起来是一个事务。

except Exception as e:

conn.rollback()

# 出现异常后回滚数据到上次commit的位置,又进入到一个新的事务。

conn.commit()

# 再次提交数据

cursor.close()

# 关闭数据库游标

conn.close()

# 关闭数据库连接

2、事物特性:

(1)原子性(Atomicity):

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

(2)一致性(Consistency):

事务前后数据的完整性必须保持一致,在事务执行之前数据库是符合数据完整性约束的,

无论事务是否执行成功,事务结束后的数据库中的数据也应该是符合完整性约束的。在

某一时间点,如果数据库中的所有记录都能保证满足当前数据库中的所有约束,则可以

说当前的数据库是符合数据完整性约束的。比如删部门表前应该删掉关联员工(已经建

立外键),如果数据库服务器发生错误,有一个员工没删掉,那么此时员工的部门表已

经删除,那么就不符合完整性约束了,所以这样的数据库也就性能太差啦。

(3)隔离性(Isolation):

1)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务

所干扰,多个并发事务之间数据要相互隔离。

2)将数据库设计为串行化程的数据库,让一张表在同一时间内只能有一个线程来操作,如

果将数据库设计为这样,那数据库的效率太低了,所以数据库的设计者没有直接将数据库设

计为串行化,而是为数据库提供多个隔离级别选项,使数据库的使用者可以根据使用情况自

己定义到底需要什么样的隔离级别。

3)mysql隔离级别和事物并发对应的关系:

A、脏读:一个事务读取到了另一个事务未提交的数据,这样做特别的危险,要尽力防止。

B、不可重复读:在一个事物内读取表中的某一行数据,多次读取结果不同(一个事物读

取到了另一个事务已经提交的数据—增加记录、删除记录、修改记录),在某些情况下并

不是问题,在另一些情况下就是问题。

C、幻读:指在一个事务内读取到了别的事务插入的数据,导致前后不一致(一个事务读

取到了另一个事务已经提交的数据—增加记录、删除记录、修改记录),在某些情况下并

不是问题,在另一些情况下就是问题。

4)数据库的安全性和效率:

安全性考虑:Serializable>Repeatable read>Read committed>Read uncommitted

数据库效率:Read uncommitted>Read committed>Repeatable read>Serializable

一般情况下,我们会使用Repeatable read、Read committed,mysql数据库默认的数

据库隔离级别Repeatable read,oracle数据库默认的数据隔离级别是Read committed。

5)mysql中设置数据库的隔离级别语句:

set global/session transaction isolation level xxxx;

如果使用global,则修改的是数据库的默认隔离级别,所有新开的窗口的隔离级别继承自这

个默认隔离级别。如果使用session修改,则修改的是当前客户端的隔离级别,和数据库默

认隔离级别无关,当前的客户端是什么隔离级别,就能防止什么隔离级别问题,和其他客户

端是什么隔离级别无关。

6)查看mysql中设置数据库的隔离级别语句:

show global variables like '%tx_isolation%';

select @@tx_isolation;

--@@代表的是全局变量

(4)持久性(Durability):

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使

数据库发生故障也不应该对其有任何影响。

38、mysql数据库(pymysql及事务)的更多相关文章

  1. MySQL数据库引擎、事务隔离级别、锁

    MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...

  2. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...

  3. MYSQL数据库重点:事务与锁机制

    一.事务 一组连续的数据库操作,每一次操作都成功,整个事务就成功,只要有一步出错,整个事务就失败: MySQL事务与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB: ...

  4. Django2.2使用mysql数据库pymysql版本不匹配问题的解决过程与总结

    前置条件 django版本:2.2.1 python版本:3.6.6 mysql版本:mysql-community8.0.15 问题 在搭建django项目,配置mysql数据库时遇到无法迁移数据库 ...

  5. MySQL数据库 InnoDB引擎 事务及行锁总结

    一.事务 1.事务的四大特性 (1)原子性:事务开始后所有的操作要么一起成功,要么一起失败,整个事务是一个不可分割的整体. (2)一致性:是物开始前到结束后,数据库的完整性约束没有被破坏. (3)隔离 ...

  6. mysql数据库----Pymysql

    本节重点: pymysql下载和使用 sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetchall 一.pymysql的下载和使用 之前我们都是通过M ...

  7. MySQL数据库-pymysql模块操作数据库

    pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connect() 参数: host=数据库ip port= ...

  8. Python连接MySQL数据库(pymysql的使用)

    本文Python版本3.5.3,mysq版本5.7.23 基本使用 # 导入pymysql模块 import pymysql #连接数据库 conn = pymysql.connect( databa ...

  9. 使用python连接mysql数据库——pymysql模块的使用

    安装pymysql pip install pymysql 使用pymysql 使用数据查询语句 查询一条数据fetchone() from pymysql import * conn = conne ...

  10. MYSQL数据库索引、事务。

    =============================================================================================== inno ...

随机推荐

  1. [bug] CDH 安装 哈希验证失败

    分析 验证 parcel 文件的哈希值 和 sha 文件不一致:文件损坏,重新下载 和 sha 官网一致:配置httpd文件 参考 哈希值和官网不一致 https://blog.csdn.net/lv ...

  2. TCP/IP协议三次握手_四次挥手

    TCP/IP协议 TCP是一种面向连接的端到端的可靠传输协议. TCP报头格式 三次握手的过程 一.客户端发送一个连接请求,发送一个随机数X,这时客户端的端口状态变为SYN_SENT状态. 二.服务端 ...

  3. mysql基础之mysql双主(主主)架构

    一.概念 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加m ...

  4. 性能调优必备:NIO的优化实现原理

    前言 我们就从底层的网络 I/O 模型优化出发,再到内存拷贝优化和线程模型优化,深入分析下 Tomcat.Netty 等通信框架是如何通过优化 I/O 来提高系统性能的. 网络 I/O 模型优化 网络 ...

  5. CAS(Compare and Swap)无锁算法-学习笔记

    非阻塞同步算法与CAS(Compare and Swap)无锁算法 这篇问题对java的CAS讲的非常透彻! 锁的代价 1. 内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的 ...

  6. Step By Step(Lua模块与包)

    Step By Step(Lua模块与包) 从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块.从使用者的角度来看,一个模块就是一个程序库,可以通过requi ...

  7. Nginx 配置实例-配置动静分离

    Nginx 配置实例-配置动静分离 1. 静态资源的创建 2. nginx 动静分离的配置 3. 验证 1. 静态资源的创建 这里使用的静态资源主要为 HTML 静态文件和图片. mkdir -vp ...

  8. RGBD动作识别的多视图层融合模型

    摘要 基于视觉的动作识别在实践中遇到了不同的挑战,包括从任何角度识别主题,实时处理数据以及在现实环境中提供隐私.甚至识别基于配置文件的人类动作(基于视觉的动作识别的一个子集),在计算机视觉中也是一个巨 ...

  9. BlazorCharts 原生图表库的建设历程

    作者:陈超超 Ant Design Blazor 项目贡献者,拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,现就职于正泰集团. 邮箱:timchen@live.com 欢迎各位读 ...

  10. https://www.jianshu.com/writer#/notebooks/164311/notes/88906048/preview

    什么是 webassembly 在 2019 年 12 月之前,如果你要编写一个web页面,那一定离不开 html.css.js 这三个好兄弟.在 2019 年 12 月之后 W3C 宣布 webas ...