python操作mysql,pymsql模块使用
一.Python Database API
现在外面流行很多种数据库,如如PostgreSQL、MySQL或者SQLite,每个数据库都有自己的操作语句和命令。如果需要了解请查阅相关文档帮助。
所有数据库的大多数基本功能都相同,因此从理论上说,对于使用其中一种数据库的程序,很容易对其进行修改以使用另一种数据库。问题是即便不同模块提供的功能大致相同,它们的接口(API)也是不同的。为解决Python数据库模块存在的这种问题,人们一致同意开发一个标准数据库API(DB API)。这个API的最新版本(2.0)是在PEP 249(Python Database API Specification v2.0)中定义的,网址为python Database API V2.0.
下面我们简单介绍下这个API V2.0:
- 1.connection对象:建立python客户端与数据库的连接,使用pymysql.Connect(参数)方法来创建。
参数解释:
| 参数名 |类型 |说明 |
| — | — | — |
|host |字符串 |数据库服务器地址 |
|port|数字 |数据库服务器端口号 |
|user |字符串 |用户名 |
|password |字符串 |密码 |
|db |字符串 |数据库名称 |
|charset |字符串 |连接编码 |
方法:
方法名 | 说明 |
---|---|
cursor() | 使用该连接创建并返回游标 |
commit() | 提交当前事物 |
rollback() | 回滚当前事物 |
close() | 关闭连接 |
- 2.cursor对象:用于执行查询和获取结果,由connection.cursor()获得。
支持的方法:
参数名 | 说明 |
---|---|
execute(op[args]]) | 执行一个数据库查询和命令 |
fetchone() | 获取结果集的下一行 |
fetchmany(size) | 获取结果集的下几行 |
fetchall() | 获取结果集剩下所有行 |
rowcount | 最近一次execute返回数据的行数或影响行数 |
close() | 关闭游标对象 |
execute方法执行过程:
fetch* 方法:在表格中有一个rownumber指向某一行,开始rownumber指向数据的第一行,每次通过fetch* 方法获得数据,rownumber就会向下移动,移动的行数为刚刚获取到的结果个数。
下面会通过例子讲解。
二.SELECT语句
直接看例子:
要处理的表如下:
import pymysql conn = pymysql.connect(host = "localhost",user = "root", db = "school", password = "ahcola@xc",port = 3306, charset = "utf8"); #创建连接 cursor = conn.cursor(); #获取游标 sql_select = "SELECT * FROM student" cursor.execute(sql_select) #执行sql语句 print(cursor.rowcount); #打印缓存区内的行数 rs = cursor.fetchone(); #获得一个记录 print(rs) rs = cursor.fetchmany(2); #获得2个记录 print(rs) rs = cursor.fetchall() #获得剩下所有记录 for row in rs: print("ID = %d, NAME = %s, SEX = %s" % row) cursor.close(); #关闭游标 conn.close(); #断开连接
执行结果:
三.INSERT,UPDATE和DELETE语句
首先我们要知道python,mysql数据库是有事务处理机制的,所有的操作都在事务里面进行,事务需要提交,才能保存结果。事务有原子性,一致性,隔离性,持久性。
- 原子性:事务中的操作要么都做,要么都不做
- 一致性:事务必须使数据库从一致性状态变为另一个一致性状态
- 隔离性:一个事务的执行不能被其他事务干扰
- 持久性:事务一旦提交,它对数据库的改变就是永久性的
事务的操作:
- 关闭自动commit:设置conn.autocommit(False),python mysql中已经自动为我们设置为False了,所以不需要在设置。
- 正常结束事务:conn.commit()。
- 异常结束事务:conn.rollback()。
下面看一个例子:
表格起始状态:
import pymysql conn = pymysql.connect(host = "localhost",user = "root", db = "school", password = "ahcola@xc",port = 3306, charset = "utf8"); cursor = conn.cursor(); sql_insert = "INSERT INTO student(ID, NAME, SEX) VALUES(7, '何有胜', '男')"; sql_update = "UPDATE student SET ID=4 WHERE NAME='马天乐'"; sql_delete = "DELETE FROM student WHERE ID<=2"; sql_select = "SELECT * FROM student"; cursor.execute(sql_select); print(cursor.fetchall()); cursor.execute(sql_insert); cursor.execute(sql_select); print(cursor.fetchall()); cursor.execute(sql_update); cursor.execute(sql_select); print(cursor.fetchall()); cursor.execute(sql_delete); cursor.execute(sql_select); print(cursor.fetchall()); cursor.close(); conn.close();
执行结果:
在看数据库发现,更新后发现数据库并未改变:
这是因为我们虽然进行了一些操作,但是事务并未提交。所以应添加conn.commit()语句。
conn.commit(); #提交事务
在看结果,变化了:
四.异常处理
如果某一sql语句出现问题,怎么办,一般我们的处理方法,是添加try块,然后进行事务回滚。例如将上面的UPDATE语句改为 sql_update = “UPDATE student SET ID1=4 WHERE NAME=‘马天乐’”,要知道我们的表格中并没有ID1这个字段,所以程序执行到这里会出错,所以这时就应该添加异常处理了,如下:
- Python 使用xlwt模块操作Excel写
- Python学习之使用ctypes模块操作C扩展程序
- Python中操作mysql的pymysql模块详解
- python文件读写并使用mysql批量插入示例分享(python操作mysql)
- Python使用os模块和fileinput模块来操作文件目录
- Python中操作mysql的pymysql模块详解
- Python 操作 Mysql 模块
- 使用Python操作MySQL
- 使用Python操作MySQL的一些基本方法
- python 文件操作 os模块使用
- 使用Python对MySQL数据操作
- Python操作Excel表格,xlwt模块的使用
- Python中对字节流/二进制流的操作:struct模块简易使用教程
- Python中操作mysql的pymysql模块详解
- python操作mysql如何使用变量
- 【python学习.Mysql的基本操作使用】
- 使用pymysql在python中对mysql的增删改查操作(四)
- Python使用os模块和fileinput模块来操作文件目录
- Windows下Python使用Pandas模块操作Excel文件的教程
- Python使用xlwt模块 操作Excel文件