Python实现MySQL的增删改查

       本文是我们《手把手教你用Python实现接口自动化测试》系列文章中的支线文章,用于我们项目中MySQL的增删改查说明。

前言

       在本系列文章中我们对MySQL的操作使用的是pymsql类库,pymsql是一个纯Python编写的MySQL类库,它的目标是替代MySQLdb,可以在CPythonPyPyIronPythonPython环境下运行。
       pymsql的性能和MySQLdb几乎相当,如果对性能要求不高,使用pymsql相对来说更加方便。而且pymsql的使用方法和MySQLdb几乎一样。

使用到的工具
  • 编程语言: Python 3.7
  • 编译器:  Pycharm
  • Python类:  pymsql

1. pymysql数据操作流程

Python实现MySQL的增删改查_第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实现MySQL的增删改查_第2张图片
微信公众号

《手把手系列​》往期文章:
《手把手教你用Python实现接口自动化测试-开篇》
《使用Pycharm创建Flask项目》
《配置文件的读写》

你可能感兴趣的:(Python实现MySQL的增删改查)