Rust in Everything
基于 sea-orm 2.0.4

全景

这一部分先回答「sea-orm 是什么」,再把查询主线从头到尾走一遍,后面各章都从这里出发。

  1. sea-orm 解决什么问题:「async & dynamic」两个词各落在哪;查询是运行期的值,按条件拼查询就是普通的 if;和 sqlx 比检查对着谁(数据库还是 Rust 里的实体),实验看列名写错、实体和库不一致、值类型不对分别在什么时候报错;和 diesel 比列是类型还是值;Model 与 ActiveModel;sea-query 为什么单独成库;dense 和展开两种实体写法。
  2. 一次 find 的全过程:cake::Entity::find_by_id(1).one(&db) 从 Select 到 Model;抓包看到实际发出的是 ... WHERE "cake"."id" = $1 LIMIT $2,LIMIT 是 int8 参数;query_one 里才选方言;驱动里 query_with + 每条语句一次 pool.acquire(),用池的计数和 pg_backend_pid() 证明连续两条语句可能落在不同的连接上。
flowchart TB
  why["sea-orm 解决什么问题"] --> one["一次 find 的全过程"]
  one --> entity["02 实体"]
  one --> sq["03 sea-query"]
  one --> conn["06 连接与事务"]

💬 关联讨论

发起讨论
加载中...