Python实现MySQL的增删改查
本文是我们《手把手教你用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数据操作流程
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、deleteinsert、update、delete语句,也可以执行create、alter、drop等语句
fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
4. 增删改查的实现
4.1 创建connection对象
本文中示例的数据库使用的是本地MySQL,连接信息采用是配置文件存储的方式进行读取的。
;本地MySQL连接信息[DataBase_ConnectInfo_Local]host=localhostport=3306dbname=testdbusername=rootpassword=root
@staticmethoddefget_connection():"""
创建DB连接对象connection
:return:
"""globalconnection"""获取配置文件中数据库的连接信息"""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)returnconnectionexceptExceptionase:print(e)print('获取数据库连接对象失败...')print('数据库连接信息为:'+str(dbconnectinfo_dict))
4.2 初始化connection对象
每次我们调用该封装类的时候,我们都对connection对象进行初始化操作。
def__init__(self):"""
初始化连接对象
"""globalcharset,cursorclass charset='utf8mb4'cursorclass=pymysql.cursors.DictCursor self.connection=self.get_connection()
4.3 进行insert、delete、update的操作(无需返回结果)
:我们在进行insert、delete、update的执行的过程中遇到错误时需要进行数据回滚操作,我们可以调用connection对象的rollback()方法将数据恢复至操作之前的状态。
defexecutedb_bysql(self,sql):"""
根据sql语句执行db操作(适用于insert、delete、update)
:param sql:
:return:
"""globalconnection"""获取DB连接对象connection"""connection=self.connectiontry:"""使用cursor()方法获取操作游标"""cursor=connection.cursor()"""执行sql语句"""cursor.execute(sql)"""提交到数据库执行"""connection.commit()"""关闭操作游标"""cursor.close()"""关闭db连接对象"""connection.close()exceptExceptionase:"""发生错误时回滚"""connection.rollback()print(e)print('执行sql语句失败,请检查sql语句...')print('SQL语句:'+str(sql))
4.3 进行select操作(有结果返回)
defselectall_bysql(self,sql):"""
根据sql语句获取多条结果(适用于select)
:param sql:
:return:
"""globalconnection"""获取DB连接对象connection"""connection=self.connectiontry:"""通过cursor创建游标"""cursor=connection.cursor()"""执行数据查询"""cursor.execute(sql)"""获取查询结果"""result=cursor.fetchall()"""提交到数据库执行"""connection.commit()"""关闭操作游标"""cursor.close()"""关闭db连接对象"""connection.close()"""返回查询结果"""returnresultexceptExceptionase:print(e)print('执行sql语句失败,请检查sql语句...')print('SQL语句:'+str(sql))
总结
以上就是我们使用pymsql类库对MySQL的操作进行的一次封装操作,该封装类主要通过提交sql语句,进行相关操作,因为我们sql语句本身就可以是增删改查的,这样不会太依赖类库中不同对象的方法了,只需专注于sql语句的编写即可。