为什么选择 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 编程助手既有传统的根据上下文代码智能补全,也有比较新奇的通过 chat 直接生成整个项目的工具。

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

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