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。请按以下步骤操作:
- 创建一个新的 Rust 项目:
cargo new sqlx-sqlite-basics-tutorial
- 在
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 与其交互。操作步骤如下:
- 定义你的数据结构。例如,我们创建一个
User结构体:
#[derive(Debug, sqlx::FromRow)]
struct User {
id: i32,
username: String,
email: String,
}
- 建立与 SQLite 数据库的连接:
let pool = sqlx::sqlite::SqlitePool::connect("sqlite:mydb.db").await?;
- 使用 SQLx 执行 SQL 查询:
let users: Vec<User> = sqlx::query_as!("SELECT * FROM users").fetch_all(&pool).await?;
SQLx 迁移(Migrations)
迁移(migrations)允许你随时间管理数据库模式(schema)的变更。下面是如何设置迁移:
- 安装 SQLx CLI 工具:
cargo install sqlx-cli
- 创建一个迁移脚本:
sqlx migrate add create_users_table
- 在 Rust 代码中应用迁移:
sqlx::migrate!().run(&pool).await?;
- 更新你的查询语句,以反映新的数据库模式。
结论
SQLx 极大地简化了 Rust 中的数据库交互,而 SQLite 则是轻量级应用的理想选择。借助 SQLx,你将能够从容应对未来 Rust 项目中的数据库需求。