SuperAPI AI 工具集

axum-impl-database

数据与分析

查看项目

更新于 10-15 22:17

技能介绍

用途:为 Axum 服务接入 SQL 数据库,使用 sqlx 连接池,并把池通过路由状态共享给各处理器。

主要能力与规则:连接池必须在启动时创建一次,用 .with_state(pool) 交给路由,禁止在处理器内创建池;Pool 本身是引用计数句柄,禁止用 Arc 或 Mutex 包裹;必须设置 acquire_timeout,否则池饱和时请求会永久挂起。

用法要点:依赖为 axum 0.8(或 0.7)、sqlx 0.8(features 含 runtime-tokio、postgres)、tokio 1(full);连接串从 std::env::var("DATABASE_URL") 读取,禁止字面量。处理器用 State(pool): State<PgPool> 读取池,&Pool 实现 Executor,可直接对 &pool 执行查询;静态 SQL 优先用 query! / query_as! / query_scalar! 宏获得编译期检查,动态 SQL 用 query() 等运行时函数并始终 .bind()。需要同一物理连接时用自定义 DatabaseConnection 提取器(0.8 原生 async fn,0.7 需 #[async_trait]);需要原子性时用 pool.begin() 开启事务,对 &mut *tx 执行后 commit,未提交即 drop 会自动回滚。查询错误应返回 Result 并用 ? 传播,不要 .unwrap()。

适用场景:Axum + Postgres/MySQL/SQLite 的增删改查、事务处理与连接池配置。

限制:资料以 Postgres 为例,其他数据库需替换类型别名;池大小需结合实例数与数据库全局连接上限评估,资料未给出具体数值建议之外的价格、平台或效果信息。