在 Rust Web开发 中,高效、安全地与数据库交互是构建现代应用的关键。而 Diesel ORM 正是 Rust 生态中最流行、类型安全的数据库抽象层之一。本教程将从零开始,带领你一步步搭建环境、定义模型、执行 CRUD 操作,即使你是 Rust 新手,也能轻松上手!

Diesel ORM(Object-Relational Mapping)是一个为 Rust 设计的类型安全的查询构建器和 ORM 工具。它支持 PostgreSQL、MySQL 和 SQLite,并通过编译时检查确保你的数据库查询是合法的,从而避免运行时错误。
使用 Diesel,你可以用 Rust 代码安全地操作数据库,而无需手动拼接 SQL 字符串,极大提升了开发效率和程序健壮性。
首先,确保你已安装 Rust(推荐使用 rustup)和 sqlite3(本教程以 SQLite 为例)。
创建一个新项目:
cargo new diesel_democd diesel_demo编辑 Cargo.toml,添加 Diesel 相关依赖:
[dependencies]diesel = { version = "2.0", features = ["sqlite", "r2d2"] }dotenvy = "0.15"r2d2 = "0.8"[dev-dependencies]diesel_cli = { version = "2.0", features = ["sqlite"] }在项目根目录创建一个 .env 文件,用于存储数据库 URL:
DATABASE_URL=sqlite://data.db然后在 src/main.rs 中初始化数据库连接:
use diesel::prelude::*;use diesel::sqlite::SqliteConnection;use dotenvy::dotenv;use std::env;pub fn establish_connection() -> SqliteConnection { dotenv().ok(); let database_url = env::var("DATABASE_URL") .expect("DATABASE_URL must be set"); SqliteConnection::establish(&database_url) .expect(&format!("Error connecting to {}", database_url))}假设我们要管理一个“用户”表。先使用 Diesel CLI 生成迁移文件:
cargo install diesel_cli --no-default-features --features sqlitediesel setupdiesel migration generate create_users编辑生成的 migrations/xxxx_create_users/up.sql 文件:
-- Your SQL goes hereCREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL UNIQUE);并在 down.sql 中写回滚逻辑:
DROP TABLE users;运行迁移:
diesel migration runDiesel 会自动生成 src/schema.rs,内容类似:
// @generated automatically by Diesel CLIdiesel::table! { users (id) { id -> Integer, name -> Text, email -> Text, }}接着在 src/models.rs 中定义 Rust 结构体:
use crate::schema::users;#[derive(Queryable, Selectable)]#[diesel(table_name = users)]#[diesel(check_for_backend(diesel::sqlite::Sqlite))]pub struct User { pub id: i32, pub name: String, pub email: String,}#[derive(Insertable)]#[diesel(table_name = users)]pub struct NewUser<'a> { pub name: &'a str, pub email: &'a str,}在 src/lib.rs 中(或 main.rs),添加以下函数:
pub mod models;pub mod schema;use self::models::{NewUser, User};use diesel::prelude::*;pub fn create_user(conn: &mut SqliteConnection, name: &str, email: &str) -> User { use crate::schema::users; let new_user = NewUser { name, email }; diesel::insert_into(users::table) .values(&new_user) .returning(User::as_returning()) .get_result(conn) .expect("Error saving new user")}pub fn all_users(conn: &mut SqliteConnection) -> Vec { use crate::schema::users::dsl::*; users.load::(conn).expect("Error loading users")} 现在你可以在 main 函数中调用这些方法:
mod models;mod schema;use diesel_demo::*;fn main() { let mut conn = establish_connection(); let user = create_user(&mut conn, "Alice", "alice@example.com"); println!("Created user: {} with email {}", user.name, user.email); let all = all_users(&mut conn); for u in all { println!("{}: {}", u.name, u.email); }}通过本教程,你已经掌握了如何在 Rust 项目中使用 Diesel ORM 进行数据库操作。从环境搭建、模型定义到基本的增查功能,每一步都经过详细说明,帮助你快速入门 Rust数据库操作。
Diesel 的强大之处在于其编译时安全性、零成本抽象以及对多种数据库的支持,是构建高性能 Rust Web开发 应用的理想选择。建议继续阅读官方文档,探索更高级的功能如关联查询、事务处理等。
希望这篇 Diesel ORM教程 对你有所帮助!Happy Coding!
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124836.html