Python之路【第二十五篇】:数据库之pymysql模块
数据库进阶
一、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模块的更多相关文章
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
- Python之路(第二十九篇) 面向对象进阶:内置方法补充、异常处理
一.__new__方法 __init__()是初始化方法,__new__()方法是构造方法,创建一个新的对象 实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法 __ ...
- Python之路(第二十六篇) 面向对象进阶:内置方法
一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...
- Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类
一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...
- Python之路(第二十四篇) 面向对象初级:多态、封装
一.多态 多态 多态:一类事物有多种形态,同一种事物的多种形态,动物分为鸡类,猪类.狗类 例子 import abc class H2o(metaclass=abc.ABCMeta): def _ ...
- Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...
- Python之路(第二十二篇) 面向对象初级:概念、类属性
一.面向对象概念 1. "面向对象(OOP)"是什么? 简单点说,“面向对象”是一种编程范式,而编程范式是按照不同的编程特点总结出来的编程方式.俗话说,条条大路通罗马,也就说我们使 ...
- Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包
一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...
- Python之路【第五篇】:面向对象及相关
Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...
- Python之路【第五篇】:面向对象和相关
Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...
随机推荐
- android 调试崩溃Unable to instantiate application的解决方法
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.***.plants, PID: 23100 ...
- JIRA的安装及配置
JIRA安装 命令行打开服务:cmd:services.msc 同禅道和tapd是一样功能的. 1.安装jdk 2.安装mysql 3.安装JIRA JIRA安装密钥的查找 1.登陆管理页面: ...
- MySQL权限管理、配置文件(三)
一.MySQL权限管理 GRANT 权限 ON 授权范围 TO '用户名'@'允许的ip(所有%)' IDENTIFIED BY '用户密码'; 权限:参加下表,一般常用的是CREATE.DELETE ...
- HDU 1372 Knight Moves 题解
Knight Moves Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- MapReduce 简单开发
先给出 maven 依赖配置 <properties> <hadoop.version>2.6.0</hadoop.version> </properties ...
- 08-C#笔记-判读语句
同C++ 支持if.switch.?: 不同之处 1. switch case支持字符. 参考: http://www.runoob.com/csharp/csharp-switch.html htt ...
- LA2955 Vivian难题——梅森素数
题意 输入 $k$(1 \leq k \leq 100)个正整数 $p_1, p_2, ..., p_k$(1 < p_i < 2{31}),找出 $k$ 个非负整数 $e_i$ 使得 $ ...
- Margin和padding失效
太久不写原生果然不行,Margin和padding对div有效,对span失效,原因就不解释了(元素性质,块状之类的)
- python发邮件报错SMTP AUTH extension not supported by server."
在login(username,password)之前添加 smtp.ehlo() smtp.starttls() d ={'smtp_server': '','smtp_email': '','sm ...
- Kafka中的HW、LEO、LSO等分别代表什么?
HW . LEO 等概念和上一篇文章所说的 ISR有着紧密的关系,如果不了解 ISR 可以先看下ISR相关的介绍. HW (High Watermark)俗称高水位,它标识了一个特定的消息偏移量(of ...