news 2026/5/29 21:56:53

测试开发干货:用 Python 玩转数据库,告别 pymysql 的繁琐操作!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
测试开发干货:用 Python 玩转数据库,告别 pymysql 的繁琐操作!

好久不见,我是ai橙好测开,专注 AI 测试开发与性能测试~

在做接口自动化、性能测试或者日常数据校验时,数据库操作是绕不开的一环。相信很多同学和我一样,最开始接触 Python 操作数据库时,用的都是pymysql这类库。

每次都要写connectcursorexecutecommitclose,还要处理异常、写try...finally,代码又长又容易出错,尤其是查询结果还要手动转成字典,简直太麻烦了!

今天给大家安利一个超级好用的第三方库 ——records,让你用几行代码优雅地搞定数据库操作,再也不用写那些冗余代码了!


一、records 是什么?

records是一个基于 SQLAlchemy 封装的轻量级 Python 数据库操作库,被称为 “人类的数据库库”。它的设计目标就是让数据库操作变得简单、直观、优雅,支持几乎所有主流数据库(MySQL、PostgreSQL、SQLite 等),特别适合测试开发场景下的快速数据校验、接口造数和测试数据清理。

它的核心优势:

  • 代码极度简洁,不用手动管理连接和游标
  • 查询结果直接支持字典、列表、JSON、Pandas DataFrame 等多种格式
  • 自动处理事务和连接关闭,告别资源泄漏
  • 支持参数化查询,避免 SQL 注入风险

二、安装与基础使用

1. 安装

直接用 pip 安装即可:

bash

运行

pip install records # 如果操作 MySQL,还需要安装 pymysql pip install pymysql

2. 连接数据库

一行代码就能连接数据库,不用写一堆配置:

python

运行

import records # 连接 MySQL 数据库,格式:数据库类型://用户:密码@主机:端口/库名 db = records.Database('mysql+pymysql://root:123456@localhost:3306/test_db')

3. 常用操作示例

(1)查询数据(SELECT)

最常用的查询,直接用query()方法,结果可以直接迭代:

python

运行

# 查询用户表中所有数据 users = db.query("SELECT * FROM user WHERE age > :age", age=18) # 方式1:直接遍历结果,每一行都是字典格式 for user in users: print(f"用户名:{user.name}, 年龄:{user.age}, 手机号:{user.phone}") # 方式2:直接转成列表字典 user_list = users.all(as_dict=True) print(user_list) # 方式3:直接转成 Pandas DataFrame(做数据校验超方便) df = users.all(as_df=True) print(df.head()) # 方式4:获取单条数据 user = users.first() print(user.name)

这里用到了参数化查询:age,可以避免 SQL 注入,比手动拼接字符串安全多了!

(2)插入数据(INSERT)

插入数据也超级简单,支持参数化批量插入:

python

运行

# 单条插入 db.query(""" INSERT INTO user (name, age, phone) VALUES (:name, :age, :phone) """, name="张三", age=20, phone="13800138000") # 批量插入(适合接口自动化造测试数据) data = [ {"name": "李四", "age": 22, "phone": "13800138001"}, {"name": "王五", "age": 25, "phone": "13800138002"}, {"name": "赵六", "age": 19, "phone": "13800138003"} ] db.bulk_query(""" INSERT INTO user (name, age, phone) VALUES (:name, :age, :phone) """, data)
(3)更新和删除(UPDATE/DELETE)

和查询、插入的用法完全一致:

python

运行

# 更新数据 db.query(""" UPDATE user SET age = :new_age WHERE name = :name """, new_age=21, name="张三") # 删除数据 db.query("DELETE FROM user WHERE name = :name", name="赵六")
(4)事务操作

如果需要批量操作要么全成功要么全失败,直接用事务上下文管理器:

python

运行

with db.transaction() as tx: tx.query("INSERT INTO user (name, age) VALUES (:name, :age)", name="事务用户1", age=30) tx.query("INSERT INTO user (name, age) VALUES (:name, :age)", name="事务用户2", age=31) # 如果中间出错,会自动回滚,不会插入任何数据

三、为什么测试开发一定要试试它?

  1. 减少重复代码:不用每次都写连接、游标、关闭连接的模板代码,把精力放在业务逻辑上
  2. 降低出错概率:自动管理连接和事务,避免忘记关闭连接导致的资源泄漏,参数化查询避免 SQL 注入
  3. 结果处理更灵活:查询结果可以直接转成字典、列表、DataFrame,做接口自动化校验、性能测试数据对比时特别方便
  4. 学习成本极低:只要会写 SQL,就能直接上手,不用花时间学习复杂的 ORM 框架

四、一个完整的测试场景示例

比如我们要做一个用户注册接口的自动化测试,需要先造数据、调用接口,再校验数据库中的结果:

python

运行

import records import requests # 1. 连接数据库 db = records.Database('mysql+pymysql://root:123456@localhost:3306/test_db') # 2. 准备测试数据 test_user = {"name": "测试用户", "age": 20, "phone": "13900139000"} # 3. 调用注册接口 response = requests.post("http://localhost:8080/api/register", json=test_user) assert response.status_code == 200, "接口调用失败" # 4. 校验数据库中的数据是否正确 result = db.query("SELECT * FROM user WHERE phone = :phone", phone=test_user["phone"]).first() assert result is not None, "用户未插入数据库" assert result.name == test_user["name"], "用户名不一致" assert result.age == test_user["age"], "年龄不一致" print("测试用例执行通过!")

整个过程简洁明了,没有冗余的数据库操作代码,一眼就能看懂业务逻辑。


五、总结

records虽然功能不如 SQLAlchemy 强大,但在测试开发场景下,它的简洁和高效是无可替代的。无论是接口自动化造数、数据校验,还是性能测试前的数据准备、测试后的数据清理,它都能帮你节省大量时间。

如果你还在写冗长的 pymysql 代码,不妨试试 records,相信你会打开新世界的大门!

后续我还会分享更多 Python 测试开发、性能测试相关的干货,比如 locust 压测、抽象类在测试框架中的应用,欢迎大家关注、点赞、收藏,一起交流学习~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 21:52:08

如何实现跨平台GPU加速:ZLUDA创新兼容层技术深度解析

如何实现跨平台GPU加速:ZLUDA创新兼容层技术深度解析 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 在异构计算成为主流的今天,GPU加速技术正推动着人工智能、科学计算和图形处理的快…

作者头像 李华
网站建设 2026/5/29 21:52:07

洛雪音乐助手:一站式聚合音乐播放器,告别多平台切换烦恼

洛雪音乐助手:一站式聚合音乐播放器,告别多平台切换烦恼 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 你是否厌倦了在不同音乐App之间来回切换&#xff…

作者头像 李华
网站建设 2026/5/29 21:50:48

AI工单自动回复提升20%满意度的实战经验

技术支持也能提效:用 Gemini 3.5 给工单“自动回复”,满意度提升 20% 的落地经验一开始我们也抵触过“让大模型回工单”。原因很现实:技术支持讲究准确、语气得体、步骤清晰;任何一句答非所问,都会被用户记住。可在 20…

作者头像 李华
网站建设 2026/5/29 21:48:33

GitLab CI前端加载慢优化实录

在CI/CD流水线的日常运维中,GitLab CI作为主流的持续集成平台,其Web界面的响应速度直接影响着开发人员的使用体验。但很多团队会发现,随着项目增多和运行时间增长,GitLab的前端加载变得越来越慢。本文记录了一次真实的GitLab CI前…

作者头像 李华