本文是我们《手把手教你用Python实现接口自动化测试》系列文章中的支线文章,用于我们项目中MySQL的增删改查说明。
前言
在本系列文章中我们对MySQL的操作使用的是pymsql
类库,pymsql
是一个纯Python编写的MySQL类库,它的目标是替代MySQLdb
,可以在CPython
、PyPy
、IronPython
和Python
环境下运行。
pymsql
的性能和MySQLdb
几乎相当,如果对性能要求不高,使用pymsql相对来说更加方便。而且pymsql的使用方法和MySQLdb几乎一样。
使用到的工具
-
编程语言: Python 3.7
-
编译器: Pycharm
-
Python类: pymsql
1. pymysql数据操作流程
我们使用pymsql
操作MySQL比较简单,跟使用客户端连接MySQL进行sql语句操作一样。
首先创建数据库的连接对象connection
,然后调用connection对象中的sql执行方法cursor
游标,使用cursor游标进行sql语句的执行,实现增删改查的功能,当然我们在使用这些对象后都应该进行关闭操作。
2. connection对象
connection对象主要是用于建立与MySQL数据库的连接,调用connection对象的cursor()方法可以返回cursor游标。
connection对象有如下几个参数:
参数名 | 参数解释 |
---|---|
host | 需要连接的mysql主机地址,如果本地数据库就是是'localhost' |
port | 需要连接的mysql主机的端口,默认是3306 |
db | 数据库的名称 |
user | 连接的mysql主机的用户名 |
password | 连接的mysql主机的密码 |
charset | 通信采用的编码方式,推荐使用utf8 |
cursorclass | 数据库驱动,python环境下使用:pymysql.cursors.DictCursor |
connection对象有如下几个方法:
方法名 | 方法作用 |
---|---|
close() | 关闭连接 |
commit() | 提交操作 |
cursor() | 获取cursor游标,用于执行sql语句 |
3. cursor游标
cursor游标主要是用于执行sql语句,使用频度最高的语句为execute()、select()、insert()、update()、delete()
cursor游标有如下几个方法:
方法名 | 方法作用 |
---|---|
execute() | 执行语句,返回受影响的行数,主要用于执行 |
insert、update、delete | insert、update、delete语句,也可以执行create、alter、drop等语句 |
fetchone() | 执行查询语句时,获取查询结果集的第一个行数据,返回一个元组 |
fetchall() | 执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回 |
4. 增删改查的实现
4.1 创建connection对象
本文中示例的数据库使用的是本地MySQL,连接信息采用是配置文件存储的方式进行读取的。
;本地MySQL连接信息
[DataBase_ConnectInfo_Local]
host = localhost
port = 3306
dbname = testdb
username = root
password = root
@staticmethod
def get_connection():
"""
创建DB连接对象connection
:return:
"""
global connection
"""获取配置文件中数据库的连接信息"""
dbconnectinfo_dict = readdbconfig.DBConnectInfo().get_database_connectinfo()
try:
"""连接MySQL数据库获取连接对象"""
connection = pymysql.connect(host=dbconnectinfo_dict.get('host'),
port=int(dbconnectinfo_dict.get('port')),
user=dbconnectinfo_dict.get('username'),
password=dbconnectinfo_dict.get('password'),
db=dbconnectinfo_dict.get('dbname'),
charset=charset,
cursorclass=cursorclass)
return connection
except Exception as e:
print(e)
print('获取数据库连接对象失败...')
print('数据库连接信息为:' + str(dbconnectinfo_dict))
4.2 初始化connection对象
每次我们调用该封装类的时候,我们都对connection对象进行初始化操作。
def __init__(self):
"""
初始化连接对象
"""
global charset, cursorclass
charset = 'utf8mb4'
cursorclass = pymysql.cursors.DictCursor
self.connection = self.get_connection()
4.3 进行insert、delete、update的操作(无需返回结果)
:我们在进行insert、delete、update的执行的过程中遇到错误时需要进行数据回滚操作,我们可以调用connection
对象的rollback()
方法将数据恢复至操作之前的状态。
def executedb_bysql(self, sql):
"""
根据sql语句执行db操作(适用于insert、delete、update)
:param sql:
:return:
"""
global connection
"""获取DB连接对象connection"""
connection = self.connection
try:
"""使用cursor()方法获取操作游标"""
cursor = connection.cursor()
"""执行sql语句"""
cursor.execute(sql)
"""提交到数据库执行"""
connection.commit()
"""关闭操作游标"""
cursor.close()
"""关闭db连接对象"""
connection.close()
except Exception as e:
"""发生错误时回滚"""
connection.rollback()
print(e)
print('执行sql语句失败,请检查sql语句...')
print('SQL语句:' + str(sql))
4.3 进行select操作(有结果返回)
def selectall_bysql(self, sql):
"""
根据sql语句获取多条结果(适用于select)
:param sql:
:return:
"""
global connection
"""获取DB连接对象connection"""
connection = self.connection
try:
"""通过cursor创建游标"""
cursor = connection.cursor()
"""执行数据查询"""
cursor.execute(sql)
"""获取查询结果"""
result = cursor.fetchall()
"""提交到数据库执行"""
connection.commit()
"""关闭操作游标"""
cursor.close()
"""关闭db连接对象"""
connection.close()
"""返回查询结果"""
return result
except Exception as e:
print(e)
print('执行sql语句失败,请检查sql语句...')
print('SQL语句:' + str(sql))
总结
以上就是我们使用pymsql
类库对MySQL
的操作进行的一次封装操作,该封装类主要通过提交sql语句,进行相关操作,因为我们sql语句本身就可以是增删改查的,这样不会太依赖类库中不同对象的方法了,只需专注于sql语句的编写即可。
本系列文章在微信平台同步发布,希望能得到您的关注。
《手把手系列》往期文章:
《手把手教你用Python实现接口自动化测试-开篇》
《使用Pycharm创建Flask项目》
《配置文件的读写》