使用 SQLx 和 SQLite 开始 Rust 数据库开发

更新于 2026-01-18

loudsilence 2024-02-26

如果你正在学习 Rust 并希望操作数据库,SQLx 是一个绝佳的选择。在本教程中,我们将探索使用 SQLx 与 SQLite 的基础知识。SQLite 是一个轻量级的嵌入式 SQL 数据库引擎。完成本教程后,你将掌握如何创建 SQLite 数据库、执行 SQL 操作,以及使用 SQLx 设置数据库迁移(migrations)。

什么是 SQLx?

SQLx 是一个易于使用的异步 SQL crate(Rust 库)。以下是它的一些关键特性:

  • 编译时检查查询:SQLx 能确保你的 SQL 查询在编译时就是有效的,从而减少运行时错误。
  • 异步支持:它能无缝地与 async-std、tokio 和 actix 等异步运行时协同工作。
  • 跨平台:SQLx 可以在任何支持 Rust 的平台上编译。
  • 连接池:内置连接池功能,实现高效的数据库访问。

你可以将 SQLx 用于多种数据库,包括 PostgreSQL、MySQL、SQLite 和 MSSQL。

什么是 SQLite?

SQLite 是一个嵌入式的 SQL 数据库引擎,无需独立服务器即可运行。它直接读写普通的磁盘文件,因此非常轻量且高效。以下是关于 SQLite 的一些关键点:

  • 小巧紧凑:即使启用所有功能,其库大小通常也小于 750 KiB。
  • 跨平台:数据库文件格式可在不同系统(例如 32 位和 64 位)之间通用。
  • 广泛流行:SQLite 被广泛用作应用程序的文件格式,尤其适用于移动设备和平板等边缘设备。

项目设置

让我们创建一个简单的项目来探索 SQLx 和 SQLite。请按以下步骤操作:

  1. 创建一个新的 Rust 项目:
cargo new sqlx-sqlite-basics-tutorial
  1. Cargo.toml 中添加必要的依赖项:
[package]
name = "sqlx-sqlite-basics-tutorial"
version = "0.1.0"
edition = "2021"

[dependencies]
sqlx = { version = "0.6.2", features = ["runtime-tokio-native-tls", "sqlite"] }
tokio = { version = "1.20.0", features = ["macros"] }
  • sqlx:Rust 的 SQL 工具包,提供异步、纯 Rust 的 SQL 功能,并支持编译时检查查询。
  • tokio:Rust 的异步运行时。

使用 SQLx 操作 SQLite 的基础知识

创建 SQLite 数据库

我们首先创建一个 SQLite 数据库,并使用 SQLx 与其交互。操作步骤如下:

  1. 定义你的数据结构。例如,我们创建一个 User 结构体:
#[derive(Debug, sqlx::FromRow)]
struct User {
    id: i32,
    username: String,
    email: String,
}
  1. 建立与 SQLite 数据库的连接:
let pool = sqlx::sqlite::SqlitePool::connect("sqlite:mydb.db").await?;
  1. 使用 SQLx 执行 SQL 查询:
let users: Vec<User> = sqlx::query_as!("SELECT * FROM users").fetch_all(&pool).await?;

SQLx 迁移(Migrations)

迁移(migrations)允许你随时间管理数据库模式(schema)的变更。下面是如何设置迁移:

  1. 安装 SQLx CLI 工具:
cargo install sqlx-cli
  1. 创建一个迁移脚本:
sqlx migrate add create_users_table
  1. 在 Rust 代码中应用迁移:
sqlx::migrate!().run(&pool).await?;
  1. 更新你的查询语句,以反映新的数据库模式。

结论

SQLx 极大地简化了 Rust 中的数据库交互,而 SQLite 则是轻量级应用的理想选择。借助 SQLx,你将能够从容应对未来 Rust 项目中的数据库需求。