在现代 Web 开发和系统编程中,高效、安全地操作数据库是每个开发者必须掌握的技能。如果你正在使用 Rust 编写高性能后端服务,那么 sqlx 是一个不可错过的异步 SQL 库。本文将带你从零开始,轻松上手 Rust sqlx 异步SQL库,即使你是 Rust 新手也能看懂!

sqlx 是一个纯 Rust 编写的异步 SQL 数据库工具库,支持 PostgreSQL、MySQL、SQLite 和 MSSQL。它的最大特点是:编译时 SQL 查询检查,这意味着你写的 SQL 语句在编译阶段就会被验证是否合法,极大减少了运行时错误。
与其他 ORM 不同,sqlx 不强制你使用模型映射,而是让你直接写原生 SQL,同时通过宏和类型系统保证安全性。这正是 Rust数据库操作 中兼顾性能与安全的理想选择。
首先,确保你已安装 Rust(推荐使用 rustup)。然后创建一个新的二进制项目:
cargo new rust_sqlx_democd rust_sqlx_demo编辑 Cargo.toml 文件,添加 sqlx 和运行时依赖(以 PostgreSQL 为例):
[dependencies]tokio = { version = "1", features = ["full"] }sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono"] }uuid = { version = "1", features = ["v4"] }chrono = "0.4"注意:如果你使用 MySQL,请将
postgres替换为mysql;SQLite 则用sqlite。
假设你本地已运行一个 PostgreSQL 数据库(可通过 Docker 快速启动),数据库名为 demo_db,用户名为 postgres,密码为 password。
在 src/main.rs 中编写以下代码:
use sqlx::PgPool;use std::env;#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // 从环境变量或直接写入连接字符串 let database_url = env::var("DATABASE_URL") .unwrap_or_else(|_| "postgres://postgres:password@localhost/demo_db".to_string()); // 创建连接池 let pool = PgPool::connect(&database_url).await?; println!("✅ 成功连接到数据库!"); Ok(())}现在我们创建一张用户表并进行基本的 CRUD 操作。首先,确保数据库中有如下表结构:
CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW());回到 Rust 代码,定义一个结构体来映射用户数据,并执行插入和查询:
use sqlx::PgPool;use uuid::Uuid;use chrono::{DateTime, Utc};#[derive(sqlx::FromRow, Debug)]pub struct User { pub id: Uuid, pub name: String, pub email: String, pub created_at: DateTime<Utc>,}#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let pool = PgPool::connect("postgres://postgres:password@localhost/demo_db").await?; // 插入新用户 let new_user_id: Uuid = sqlx::query_scalar( "INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id" ) .bind("张三") .bind("zhangsan@example.com") .fetch_one(&pool) .await?; println!("🆕 新用户 ID: {}", new_user_id); // 查询所有用户 let users: Vec<User> = sqlx::query_as!(User, "SELECT * FROM users") .fetch_all(&pool) .await?; for user in users { println!("👤 用户: {}, 邮箱: {}", user.name, user.email); } Ok(())}注意:query_as! 是 sqlx 提供的编译时宏,它会在编译阶段检查 SQL 是否与结构体字段匹配。如果字段名或类型不一致,编译会直接失败——这就是 sqlx教程 中最强大的安全特性之一!
tokio,适合高并发场景。通过本篇 异步数据库Rust 教程,你应该已经掌握了如何使用 sqlx 连接数据库、执行查询和映射结果。无论你是构建微服务、API 后端还是数据处理工具,sqlx 都能为你提供安全、高效的数据库交互能力。
下一步建议:尝试使用 migrate 功能管理数据库版本,或结合 axum/actix-web 构建完整 Web 应用。
Happy Coding with Rust and sqlx! 🦀
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124410.html