使用PyMysql进行操作数据库(企业中也用于测试数据库)

背景:
1,无论是功能测试还是性能测试的造数据,如果逻辑简单可以使用存储过程进行造数据,如果业务复杂可以使用接口进行造数据,但是如果逻辑不是很简单也不是很复杂,那么你该选择哪个呢?别担心,还有第三种选择方式,那就是使用python连接操作,可适用于逻辑结构一般的业务。
2,前端的测试可能只需要去一张表里面查看落库是否正常就可以,但是服务端的测试,就有很多的清表操作,数据同步,数据复制,其中要测的数据小则几百行,多则几万行,而且每张表都有几十上百个字段,使用人眼进行对数据,显然不现实,一般我们都使用代码测,测得正确,测得全,且节省了人力。
目的:
使用python+pymysql帮助我们进行功能/性能造数和对后端服务进行数据测试做前置准备。

前提条件
 

安装yaml:  pip install pyyaml
安装pyMysql:  pip install PyMySQL


1,设置yaml
 

 yaml的语法是key: value这种键值对的形式,Map(属性和值),注:冒号后面要加空格
第一种语法:
换行表示对象的属性
user:
        username: 江云
        userSex: 男
第二种语法:
使用-代表数组,--代表数组里面的数组
users:
        -user1
                --阿江
                --小江
        -user2
第三种语法
users: [suer1,user2,user3]

以下为第一种

 代码如下

mysql1:
  host: 127.0.0.1
  port: 3306
  user: admin
  password: admin
  database: database
  charset: 'utf8'

mysql2:
  host: 127.0.0.1
  port: 3306
  user: admin1
  password: admin1
  database: database
  charset: 'utf8'


2,连接mysql

 ①使用with open打开yaml的mysql配置或者自己封装的打开方式
 ②把yaml上的配置赋值给设置的属性,分别有host地址,账户密码,端口(对于端口号,默认的是3306,但是企业的所有mysql端口都会进行修改,不然容易端口冲突),具体的库(如果设置了哪个库就只能查哪个库),还有编码格式。

具体代码如下 

from RequestUnittestDDT.util import operat_config

def getMysql():
    #read_yaml_all为自定义方法,可直接使用with open打开文件
    cfg = operat_config.read_yaml_all('config/mysql.yaml')
    mysql_host = cfg["mysql1"]["host"]
    mysql_user = cfg["mysql1"]["user"]
    mysql_password = cfg["mysql1"]["password"]
    mysql_port = cfg["mysql1"]["port"]
    mysql_db = cfg["mysql1"]["database"]
    mysql_charset = cfg["mysql1"]["charset"]
    mysql = pymysql.connect(host=mysql_host,
                                 user=mysql_user,
                                 password=mysql_password,
                                 port=mysql_port,
                                 db=mysql_db,
                                 charset=mysql_charset)
    return mysql
if __name__ == '__main__':
    getMysql()


3,进行sql操作(增删改查)
 

要执行sql,首先需要获取能连接的数据库和获取游标,游标用于操作sql

增删改需要进行commit提交事务,如果失败了则需要事件回滚,保证事务的完整性和一致性,
有报错也会抛出去,最后关闭游标关闭数据库连接         

from RequestUnittestDDT.mysql.connect_mysql import getMysql


class OperatMysql():
    def __init__(self):
        self.mysql = getMysql()
        self.cursor = self.mysql.cursor()
    '''此方法用于查询数据库'''
    def query_all(self,sql):
        try:
            self.cursor.execute(sql)
            mysql_data = self.cursor.fetchall()
            print('查询成功')
            return mysql_data
        except Exception as e:
            print("查询失败,失败原因为:", e)
        finally:

            self.cursor.close()
            self.mysql.close()
    '''此方法为更新表内容'''
    def update(self,sql):
        try:
            self.cursor.execute(sql)
        except Exception as e:
            print("更新表失败,失败原因为:", e)
            self.mysql.rollback()
            print("内容已回滚")
        else:
            self.mysql.commit()
        finally:

            self.cursor.close()
            self.mysql.close()
    '''往数据库表插入内容'''
    def insert(self,sql):
        try:
            self.cursor.execute(sql)
        except Exception as e:
            print("插入表失败,失败原因为:", e)
            self.mysql.rollback()
            print("内容已回滚")
        else:
            self.mysql.commit()
            print('操作成功')
        finally:

            self.cursor.close()
            self.mysql.close()
    '''删除表内容的操作'''
    def delete(self,sql):
        try:
            self.cursor.execute(sql)
        except Exception as e:
            print("删除操作失败,失败原因为", e)
        else:
            self.mysql.commit()
            print("操作成功")
        finally:

            self.cursor.close()
            self.mysql.close()

Python连接数据库篇结束,欢迎观看我主页上别的篇章

以下是一个基于pymysql数据库操作类示例: ```python import pymysql class Database: def __init__(self, host, port, user, password, db): self.host = host self.port = port self.user = user self.password = password self.db = db self.conn = None self.cursor = None def connect(self): self.conn = pymysql.connect( host=self.host, port=self.port, user=self.user, password=self.password, db=self.db, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) self.cursor = self.conn.cursor() def close(self): if self.cursor: self.cursor.close() if self.conn: self.conn.close() def execute(self, sql, params=None): self.connect() try: self.cursor.execute(sql, params) self.conn.commit() except: self.conn.rollback() raise finally: self.close() def query(self, sql, params=None): self.connect() try: self.cursor.execute(sql, params) result = self.cursor.fetchall() except: raise finally: self.close() return result ``` 使用示例: ```python # 创建数据库实例 db = Database(host='localhost', port=3306, user='root', password='password', db='test') # 执行SQL语句 db.execute("INSERT INTO `users` (`name`, `age`) VALUES ('Alice', 25)") # 查询数据 result = db.query("SELECT * FROM `users` WHERE `age` > %s", (20,)) for row in result: print(row) ``` 在此示例使用了connect()和close()方法来连接和关闭数据库连接,execute()和query()方法用于执行SQL语句和查询数据。其execute()方法会自动提交事务,而query()方法不会。这个类可以根据需要进行扩展,例如添加更多的查询方法、事务处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值