您的位置:首页 > 编程语言 > Python开发

python操作mysql,pymsql模块使用

2019-01-21 10:31 375 查看

一.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这个字段,所以程序执行到这里会出错,所以这时就应该添加异常处理了,如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: