You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在Rust中编写异步函数以保存SurrealDB记录

求助:如何在Rust中编写异步函数以保存SurrealDB记录

兄弟我太懂你这种挫败感了!之前用别的语言写个数据保存分分钟搞定,到Rust这儿因为异步、所有权这些玩意儿卡壳,真的让人头大😮‍💨 我当初刚啃SurrealDB异步操作的时候也踩过不少坑,给你捋个最接地气的实现方法,你跟着改就行:

首先,先把依赖给配对,Cargo.toml里得把需要的包都加上,尤其是异步相关的特性:

[package]
name = "surreal_async_demo"
version = "0.1.0"
edition = "2021"

[dependencies]
surrealdb = { version = "1.0", features = ["kv-rocksdb", "async"] }
tokio = { version = "1.0", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }

接下来,咱们一步步写代码:

  • 首先定义要保存的结构体,得能被序列化/反序列化,这样SurrealDB才能处理:
use serde::{Deserialize, Serialize};
use surrealdb::{engine::rocksdb::RocksDb, Surreal, Result, sql::Thing};

#[derive(Debug, Serialize, Deserialize)]
struct User {
    id: Option<Thing>, // 可选ID,插入时数据库会自动生成
    name: String,
    email: String,
}
  • 然后写核心的异步保存函数,这里要注意数据库实例的传递,因为Rust的所有权规则,咱们传引用就行(如果是多线程场景,后面可以换成Arc<Surreal<RocksDb>>,新手先从简单的来):
async fn save_user(db: &Surreal<RocksDb>, user: User) -> Result<User> {
    // 调用SurrealDB的create方法插入记录,自动返回保存后的实例
    let saved_user = db.create("user").content(user).await?;
    Ok(saved_user)
}
  • 最后在异步的main函数里调用这个保存函数,记得用tokio的main宏来启动异步运行时:
#[tokio::main]
async fn main() -> Result<()> {
    // 初始化RocksDB连接,异步操作要加await
    let db = Surreal::new::<RocksDb>("./my_local_db").await?;
    
    // 设置命名空间和数据库,这步也得await
    db.use_ns("my_namespace").use_db("my_database").await?;

    // 构造要保存的用户数据
    let new_user = User {
        id: None,
        name: "李四".to_string(),
        email: "lisi@test.com".to_string(),
    };

    // 调用保存函数,处理结果
    let saved_user = save_user(&db, new_user).await?;
    println!("记录保存成功!结果: {:?}", saved_user);

    Ok(())
}

新手容易踩的几个坑我给你提个醒:

  • 所有异步操作后面必须加await,不然代码根本不会执行,只会返回一个Future对象
  • 数据库实例的所有权别乱移,传引用或者用Arc来共享,不然会编译报错
  • 结构体一定要加Serialize和Deserialize derive宏,不然SurrealDB没法把数据转成它能存的格式

备注:内容来源于stack exchange,提问作者jxbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:23:13