PyMySQL实现与数据库的交互

1、什么是PyMySQL

为了使Python连接上数据库,你需要一个驱动,这个驱动是用于与数据库交互的库。
                     
PyMySQL : 这是一个使Python连接到MySQL的库,它是一个纯Python库。

环境要求:
PyMySQL支持的python版本:

  • python2
    python2.7
  • python3
    python version >=3.4

2、如何安装PyMySQL

打开cmd,输入以下语句:
pip install PyMySQL

回车等待安装完成。


3、PyMySQL实现与数据库的交互

PyMySQL实现与数据库的交互,我们首先需要了解一下Python数据库的图解流程。关于图解流程图中的Connection对象和游标对象Cursor下面给出了生动的比喻。

Python 数据库图解流程:

Connection、Cursor比喻:


下面我们先上代码,用PyMySQL与数据库进行交互实现增删改查,有关代码中的陌生函数会在文章末尾给出说明。


3.1 查询操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pymysql #导入pymysql

#数据库链接
db = pymysql.connect(host="localhost",user="root",password="root",db="demo")

#使用cursor()方法获取操作游标
cur = db.cursor()

#使用查询操作
#编写sql语句,profile是db里面的一个表名
sql = "select * from profile"

#比喻图解里面出现的“事故”
try:
cur.execute(sql) #执行查询操作
results = cur.fetchall() #fetchall方法返回一个包含所有查询信息的元组
print("id","name","critical_level") #表中字段名
for row in results: #打印表单
print(row[0],row[1],row[2])
except Exception as e:
raise e #抛出异常
finally:
db.close() #关闭数据库
cur.close() #关闭光标

运行结果

id name critical_level
1 warp core 4
2 life support 3
3 thruster 2
4 transporer 1
5 deflecter 2
6 botanic bay 0
8 warp system 2
9 phaser bank 1
10 photon torpedo 2
11 primary system 2
12 secondary system 1
13 coca cola 4
14 sensor 1


3.2 插入操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql #导入pymysql

#数据库链接
db = pymysql.connect(host="localhost",user="root",password="root",db="demo")

#使用cursor()方法获取操作游标
cur = db.cursor()

#使用插入操作
#编写sql语句,profile是db里面的一个表名
sql = "insert into profile(id,name,critical_level) values(15,'QzmVc1','5')"

#比喻图解里面出现的“事故”
try:
cur.execute(sql) #执行插入操作
db.commit() #提交操作
except Exception as e:
db.rollback() #错误回滚
finally:
db.close() #关闭数据库
cur.close() #关闭光标

3.3 更新操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql #导入pymysql

#数据库链接
db = pymysql.connect(host="localhost",user="root",password="root",db="demo")

#使用cursor()方法获取操作游标
cur = db.cursor()

#使用更新操作
#编写sql语句,profile是db里面的一个表名
sql = "update profile set name = '%s',critical_level = %d where id = %d"

#比喻图解里面出现的“事故”
try:
cur.execute(sql % ('Vincent',3,15)) #执行插入操作
db.commit() #提交操作
except Exception as e:
db.rollback() #错误回滚
finally:
db.close() #关闭数据库
cur.close() #关闭光标

3.4 删除操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql #导入pymysql

#数据库链接
db = pymysql.connect(host="localhost",user="root",password="root",db="demo")

#使用cursor()方法获取操作游标
cur = db.cursor()

#使用删除操作
#编写sql语句,profile是db里面的一个表名
sql = "delete from profile where id = %d"

#比喻图解里面出现的“事故”
try:
cur.execute(sql % (15)) #执行插入操作
db.commit() #提交操作
except Exception as e:
db.rollback() #错误回滚
finally:
db.close() #关闭数据库
cur.close() #关闭光标

4、关于以上代码做几点说明

4.1 pymysql.connect()函数参数

            

4.2 Connection对象支持的方法

                

4.3 游标对象Cursor支持的方法

                

4.4 execute方法执行过程图解

               

4.5 fetch* 方法

               

4.6 关于事务的几点说明

4.6.1 commit方法
  
像插入、删除、更新这种对数据库造成更改的操作需要进行提交操作

4.6.2 什么是错误回滚?
     
Cursor游标对象在Python和数据库之间进行交互时可能会发生异常事件,这就类似货车在公路上可能会发生事故。在程序中我们用try-except-finally进行异常处理。比如现在在try语句我们要进行多条数据库数据的插入命令,当执行到某条语句的时候发生了异常。这时,except接收并处理异常,由于异常语句之前的插入命令已经生效,为了不对数据库造成永久性的改变,我们需要事务回滚,回到数据库最初的状态,这就是错误回滚。

4.7 close()方法
            
用完游标和连接后,千万记得把他们关闭。如果不关闭就会导致连接泄露,造成一种未关闭连接现象,即连接已经不再使用,但是数据库却不能关闭,因为数据库不能确定你还要不要继续使用它。这种现象会一直耗费数据库的资源,所以用完数据库之后记得关闭连接!