数据库进阶

一、pymysql模块

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

二、pymysql模块安装

pip install pymysql

三、执行sql语句

#_*_ coding:utf-8 _*_
# Author:Simon
# Datetime:2019/9/27 8:51
# Software:PyCharm import pymysql conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='lesson54') cursor=conn.cursor() cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) //#更改获取数据结果的数据类型,默认是元组,可以改为字典等 # sql="CREATE TABLE TEST(id INT, name VARCHAR (20))"
# cursor.execute(sql)
# cursor.execute("INSERT INTO test VALUES (3,'simon1'),(4,'zhurui1')") //查询
row_affected=cursor.execute("SELECT * FROM test")
# one=cursor.fetchone()
# all=cursor.fetchall()
# many=cursor.fetchmany(2) print(cursor.fetchone())
print(cursor.fetchall())
print(cursor.fetchmany()) #scroll
# cursor.scroll(-1,mode="relative") #相对当前位置移动
# cursor.scroll(1,mode="absolute") #相对绝对位置移动 conn.commit() //执行完sql,首先要提交
cursor.close() //关闭终端
# conn.close() //关闭连接                

四、事务

4.1 事务命令

事务只逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功;

数据库开启事务命令

--        start transaction 开启事务
-- Rollback 回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚到上一次commit的位置
-- Commit 提交事务,提交未存储的事务
--
-- savepoint 保留点 ,事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)

转账实例:

mysql> create table account(id int,name varchar(20),balance double);
Query OK, 0 rows affected (0.03 sec) mysql> insert into test account values(1,"朱锐",16000);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'accou
nt values(1,"朱锐",16000)' at line 1
mysql> insert into account values(1,"朱锐",16000);
Query OK, 1 row affected (0.01 sec) mysql> insert into account values(2,"simon",46000);
Query OK, 1 row affected (0.01 sec) mysql> select * from account;
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | 朱锐 | 16000 |
| 2 | simon | 46000 |
+------+--------+---------+
2 rows in set (0.00 sec) mysql> start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec) mysql>
mysql>
mysql> update account set balance=balance-5000 where id=1; //转账
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from account;
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | 朱锐 | 11000 |
| 2 | simon | 46000 |
+------+--------+---------+
2 rows in set (0.00 sec) mysql>

rollback回退:

mysql> rollback;
Query OK, 0 rows affected (0.01 sec) mysql> select * from account;
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | 朱锐 | 16000 |
| 2 | simon | 46000 |
+------+--------+---------+
2 rows in set (0.00 sec) mysql>

commit提交事务:

mysql> select * from account;
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | 朱锐 | 11000 |
| 2 | simon | 46000 |
+------+--------+---------+
2 rows in set (0.00 sec) mysql> update account set balance=balance+5000 where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from account;
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | 朱锐 | 11000 |
| 2 | simon | 51000 |
+------+--------+---------+
2 rows in set (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql>

savepoint:

create table test2(id int PRIMARY KEY auto_increment,name VARCHAR(20)) engine=innodb;
INSERT INTO test2(name) VALUE ("simon"),
("zhurui"),
("caiyunjie"); start transaction;
insert into test2 (name)values('zhuruirui');
select * from test2;
commit; -- 保留点 start transaction;
insert into test2 (name)values('huozhu');
savepoint insert_wu;
select * from test2; delete from test2 where id=4;
savepoint delete1;
select * from test2; delete from test2 where id=1;
savepoint delete2;
select * from test2; rollback to delete1; select * from test2; savepoint

4.2 python中调用数据库启动事务的方式

import pymysql

#添加数据

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test')

cursor = conn.cursor()

try:
insertSQL0="INSERT INTO ACCOUNT2 (name,balance) VALUES ('caiyunjie',60000)"
insertSQL1="UPDATE account2 set balance=balance-12700 WHERE name='simon'"
insertSQL2="UPDATE account2 set balance=balance+12700 WHERE name='zhurui'" cursor = conn.cursor() cursor.execute(insertSQL0)
conn.commit() cursor.execute(insertSQL1)
raise Exception
cursor.execute(insertSQL2)
cursor.close()
conn.commit() except Exception as e: conn.rollback()
conn.commit() cursor.close()
conn.close()

Python之路【第二十五篇】:数据库之pymysql模块的更多相关文章

  1. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  2. Python之路(第二十九篇) 面向对象进阶:内置方法补充、异常处理

    一.__new__方法 __init__()是初始化方法,__new__()方法是构造方法,创建一个新的对象 实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法 __ ...

  3. Python之路(第二十六篇) 面向对象进阶:内置方法

    一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...

  4. Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类

    一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...

  5. Python之路(第二十四篇) 面向对象初级:多态、封装

    一.多态 多态 多态:一类事物有多种形态,同一种事物的多种形态,动物分为鸡类,猪类.狗类 例子 import abc class H2o(metaclass=abc.ABCMeta): ​ def _ ...

  6. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  7. Python之路(第二十二篇) 面向对象初级:概念、类属性

    一.面向对象概念 1. "面向对象(OOP)"是什么? 简单点说,“面向对象”是一种编程范式,而编程范式是按照不同的编程特点总结出来的编程方式.俗话说,条条大路通罗马,也就说我们使 ...

  8. Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包

    一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...

  9. Python之路【第五篇】:面向对象及相关

    Python之路[第五篇]:面向对象及相关   面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...

  10. Python之路【第五篇】:面向对象和相关

    Python之路[第五篇]:面向对象及相关   面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...

随机推荐

  1. android studio学习----添加项目依赖包补充---添加github上的开源项目为库

    导入maven中的库 如果开源库作者有将代码放到Maven库中,我们可以在gradle配置中直接引入,类似如下: compile 'com.github.dmytrodanylyk.android-p ...

  2. ssh免密登录(公钥私钥)指令

    1.在.ssh目录中执行ssh-keygen -t rsa命令生成两个秘钥,公钥(id_rsa.pub)和私钥(id_rsa) 2.ssh-copy-id -i id_rsa.pub 对方用户名@对方 ...

  3. java修饰符在含义以及在eclipse下的显示

    java四类修饰符的含义: public:公开的修饰符,没有调用限制,只用有该对象的路径,都可以调用. protected:在本类,同一个包,或子类中可以被调用. default(没有修饰符):在同一 ...

  4. AI-数据标注类型

        随着数据的暴增和计算机硬件技术的发展,也催生了AI技术在各行各业的应用渗透.而想将AI技术应用到各行各业,数据是必需品.因为数据直接影响到AI最终训练出来的模型好坏.AI建模没有太大门槛,但数 ...

  5. 大数据技术原理与应用【第五讲】NoSQL数据库:5.4 NoSQL的三大基石

    NoSQL的三大基石:cap,Base,最终一致性   5.4.1 cap理论(帽子理论):   consistency:一致性availability:可用性partition tolerance: ...

  6. ubuntu 18.04 设置静态ip方法

    1. 前言 本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址. 2. 确认你要修改的网卡号 先确认你要修改的网卡号,假设你的服 ...

  7. <人人都懂设计模式>-中介模式

    真正的用房屋中介来作例子, 好的书籍总是让人记忆深刻. class HouseInfo: def __init__(self, area, price, has_window, has_bathroo ...

  8. djabgo 中间件

    1.中间件是发生在request和response 之间,都会经过中间键, 上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,我们可以自己写一个类,但是必须继承Middleware ...

  9. msyql常用命令

    1.创建.删除数据库 create database dbname; drop database dbname; 2.选择某一个数据库 use dbname; 3.显示所有表 show tables; ...

  10. $('xx')[0].files[0]

    ①首先得明白jQuery对象只能使用jQuery对象的属性和方法,JavaScript对象只能使用JavaScript对象的属性和方法: ②files[0]是JavaScript的属性: ③$('xx ...