《Python 开发攻略:FastAPI和pymysql 操作 Doris或者mysql 数据库的综合指南》

秃头程序员与猫🐱

我不知道同学们,操作数据库Mysql增删改查或者Doris增删改查 都用什么?评论区可以我们讨论一下
我最近使用的FastApi 框架 ,分下面几种情况:

  1. 直接使用数据库连接库 pymysql 包 的pymysql.connect(**db_config), connection.cursor()
    
  2. 使用 FastAPI 的依赖注入系统:SessionLocal()创建数据库会话
    
  3. 使用异步数据库库:aiomysql
    
  4. 使用 SQLAlchemy
    
  5. 使用数据库中间件,如 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大数据全栈呀

    物联沃分享整理
    物联沃-IOTWORD物联网 » 《Python 开发攻略:FastAPI和pymysql 操作 Doris或者mysql 数据库的综合指南》

    发表回复