《Python 开发攻略:FastAPI和pymysql 操作 Doris或者mysql 数据库的综合指南》
秃头程序员与猫🐱
我不知道同学们,操作数据库Mysql增删改查或者Doris增删改查 都用什么?评论区可以我们讨论一下
我最近使用的FastApi 框架 ,分下面几种情况:
-
直接使用数据库连接库 pymysql 包 的pymysql.connect(**db_config), connection.cursor()
-
使用 FastAPI 的依赖注入系统:SessionLocal()创建数据库会话
-
使用异步数据库库:aiomysql
-
使用 SQLAlchemy
-
使用数据库中间件,如 SQLModel 或 Tortoise ORM
那他们有什么优缺点呢
数据库连接库 | 适合简单的查询和操作 | 优点 | 缺点 |
---|---|---|---|
数据库连接库 | 适合简单的查询和操作 | DictCursor方便使用、易于理解 | 1. 性能开销:2. 功能有限:仅支持同步操作,高并发场景不高效 |
FastAPI 的依赖注入系统 | 适合在 FastAPI 中管理数据库会话 | 代码清晰模块化、方便测试、性能优化 | 复杂度增加、配置繁琐 |
异步数据库库 | 适合需要异步操作的场景 | 提高并发能力、体验好、资源利用率高 | 复杂性增加、调试困难、错误处理困难 |
SQLAlchemy | 需要复杂查询和 ORM 功能的场景 | ORM、跨库、灵活 | 难理解、性能开销 |
数据库中间件 | 适合需要更高级功能的复杂项目 | 简化开发、性能优化、方便维护 | 依赖性强、灵活性受限 |
具体区别:
1. pymysql.DictCursor 的优缺点
方便使用:DictCursor 可以直接将查询结果以字典形式返回,键为列名,值为对应的数据,方便直接操作。 易于理解:对于熟悉 Python
字典操作的开发者来说,这种方式非常直观。
性能开销:由于需要将结果集转换为字典,可能会带来一定的性能开销,尤其是在处理大量数据时。
功能有限:仅支持同步操作,对于高并发场景可能不够高效。
2. FastAPI 依赖注入系统的优缺点
代码清晰:依赖注入系统可以帮助管理数据库连接和会话,使代码更加清晰和模块化。
易于测试:依赖注入使得单元测试更加容易,可以方便地注入模拟的数据库会话。
性能优化:通过合理管理数据库连接,可以提高应用性能。
复杂度增加:依赖注入系统需要一定的学习成本,对于简单的应用可能显得过于复杂。
配置繁琐:需要正确配置依赖注入系统,否则可能导致错误。
3. 异步数据库库(如 aiomysql)的优缺点
提高并发能力:异步操作可以显著提高处理大量请求的效率,减少响应时间。
提升用户体验:应用程序可以在等待数据库操作完成时继续处理其他任务,提升用户体验。
资源利用率高:在高并发场景下,异步操作可以更高效地利用系统资源。
复杂性增加:异步编程比同步编程更复杂,需要处理回调、协程等。 调试困难:异步操作的非线性执行顺序使得调试和追踪问题更加困难。
错误处理复杂:需要特别关注异步操作中的错误处理。
4. SQLAlchemy 的优缺点
ORM 支持:通过 ORM(对象关系映射)可以将数据库表映射为 Python 类,减少编写复杂 SQL 查询的需求。
跨数据库兼容性:支持多种数据库,便于在不同数据库之间切换。 灵活性高:适用于复杂的数据库结构和业务逻辑。
学习曲线陡峭:对于初学者来说,ORM 的概念和用法可能较难理解。 性能开销:ORM 的抽象层可能导致性能下降,尤其是在处理大量数据时。
5. 数据库中间件(如 SQLModel 或 Tortoise ORM)的优缺点
简化开发:中间件通常提供了更高级的功能,简化了数据库操作。 性能优化:一些中间件可能对性能进行了优化,适合高并发场景。
易于维护:中间件通常提供了更好的代码组织方式,便于维护。
依赖性强:过度依赖中间件可能导致项目对特定中间件的依赖度过高。
灵活性受限:中间件可能在某些复杂场景下不够灵活。
总结分析
pymysql.DictCursor:适合简单的同步操作,尤其在需要快速开发和调试时。
SQLAlchemy:适合复杂的业务逻辑和多数据库支持的场景。
FastAPI 依赖注入系统:适合在 FastAPI 中管理数据库会话,提高代码的可维护性和测试性。
异步数据库库:适合高并发场景,能够显著提升性能和用户体验。
数据库中间件:适合需要更高级功能和简化开发的场景,但需注意依赖性和灵活性。
作者:叶沧ii大数据全栈呀