为什么选择 sqlx 而不是 ORM?

强类型语言中,数据库操作的痛点是什么?

在 Rust 等强类型语言中,操作数据库最大的痛点当然是 Rust 语言的数据结构(比如:结构体、枚举等)与数据表字段的映射。

这也是很多人用 ORM 的主要原因之一吧。

另一个痛点是,书写 SQL 语句。尤其是在数据表比较复杂或者更改数据表定义时,这个问题尤其突出。

真的需要 ORM 吗?

那么,真的需要 ORM 吗?不可否认,ORM 提供了高度抽象,让数据库操作变得犹如操作结构体等原生数据结构。但它的弊端也很突出:

  • 过度抽象:为了实现如操作结构体般操作数据库,ORM 进行了高度的抽象,甚至到了过度抽象的程度。虽然 Rust 语言的宏(在 Rust 中,ORM 基本都是通过宏来实现功能)提供了零成本抽象,但过度抽象给程序的调试,以及程序员对流程的把握带来了不少的挑战,更不用说优化 SQL 语句了。

  • 生成的 SQL 过于通用:

    • ORM 通常为多种数据库提供支持,这就意味着,它生成的 SQL 语句是通用的,很大机会用不到数据库引擎提供的优化功能
    • ORM 为了实现各场景通用,也只能生成通用的 SQL 语句
  • 某些 ORM 提供 RAW 的概念,允许用户书写原始 SQL 语句。为了弥补生成 SQL 过于通用或者适用某些需要优化 SQL 语句的场景,某些 ORM 允许用户书写原始 SQL 语句。我都手写 SQL 语句了,为什么还要用 ORM?

sqlx 能解决哪些痛点?

  • 首先,sqlx 能实现 Rust 数据结构与数据表字段的自动映射
  • 其次,使用 sqlx 必须手写 SQL 语句,不会自作聪明地给你生成通用的、低效的 SQL 语句

等下,你刚刚说,手写 SQL 语句尤其是在复杂表或修改表结构时,是一大痛点,你现在又在推 sqlx 不是自相矛盾?

借助 AI 编程助手,SQL 语句基本就告别手写了。

AI 编程助手及免费 AI API

  • Copilot:提供了一定的免费额度
  • Codeium:免费 AI 编程助手
  • Cody:免费 AI 编程助手,好像需要 VSCODE 安装 Python 插件
  • Cline:通过 chat 直接生成项目,可以使用多种 AI 模型。其 fork 版的 Roo Cline 更为方便的功能。
  • Cherry Studio:支持多种 AI 模型的桌面应用

本人用的是 Codeium 做代码补全,偶尔会用 Cline 来做一些测试用的小项目,同时会使用 Cherry Studio 来做一些转换,比如将 SQL CREATE 语句转换成对应的 Rust 数据结构。

现在很多为爱发电的朋友提供免费的 API,这些 API 支持主流的 AI 模型,并且可以通过每日签到来获取积分/金额,以便使用他们的 API:

要查看完整内容,请先登录