数据库概述 #
数据库库选择 #
Actix Web 可以与多种 Rust 数据库库配合使用:
| 库 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| SQLx | 异步查询 | 编译时检查、原生异步 | 高性能应用 |
| Diesel | ORM | 类型安全、功能丰富 | 传统 ORM 需求 |
| SeaORM | 异步 ORM | 现代化 API、易用 | 快速开发 |
SQLx #
特点 #
- 编译时 SQL 检查
- 原生异步支持
- 轻量级,无 ORM 开销
- 支持多种数据库
基本用法 #
rust
use sqlx::postgres::PgPoolOptions;
let pool = PgPoolOptions::new()
.max_connections(5)
.connect("postgres://user:pass@localhost/db")
.await?;
let users = sqlx::query!("SELECT * FROM users")
.fetch_all(&pool)
.await?;
优缺点 #
| 优点 | 缺点 |
|---|---|
| 编译时检查 | 需要数据库连接编译 |
| 高性能 | 无 ORM 功能 |
| 异步原生 | 学习曲线较陡 |
Diesel #
特点 #
- 成熟的 ORM 框架
- 类型安全查询
- 迁移管理
- 支持多种数据库
基本用法 #
rust
use diesel::prelude::*;
let connection = PgConnection::establish("postgres://user:pass@localhost/db")?;
let users = users::table
.filter(users::active.eq(true))
.load::<User>(&connection)?;
优缺点 #
| 优点 | 缺点 |
|---|---|
| 功能丰富 | 同步 API |
| 类型安全 | 编译复杂 |
| 迁移工具 | 学习成本高 |
SeaORM #
特点 #
- 异步 ORM
- 现代化 API
- 动态查询
- 支持多种数据库
基本用法 #
rust
use sea_orm::*;
let db = Database::connect("postgres://user:pass@localhost/db").await?;
let users = Users::find()
.filter(users::Column::Active.eq(true))
.all(&db)
.await?;
优缺点 #
| 优点 | 缺点 |
|---|---|
| 异步原生 | 相对较新 |
| 易于使用 | 社区较小 |
| 动态查询 | 性能略低 |
选择建议 #
选择 SQLx 如果 #
- 需要最高性能
- 熟悉 SQL
- 需要编译时检查
- 项目简单
选择 Diesel 如果 #
- 需要成熟 ORM
- 团队熟悉 ORM
- 需要迁移管理
- 同步 API 可接受
选择 SeaORM 如果 #
- 需要异步 ORM
- 快速开发
- 现代化 API
- 动态查询需求
数据库支持 #
| 数据库 | SQLx | Diesel | SeaORM |
|---|---|---|---|
| PostgreSQL | ✅ | ✅ | ✅ |
| MySQL | ✅ | ✅ | ✅ |
| SQLite | ✅ | ✅ | ✅ |
| MSSQL | ✅ | ❌ | ❌ |
下一步 #
根据你的需求选择合适的数据库库:
最后更新:2026-03-29