【Rust日报】2023-03-22 sqlx 真的很好,但是你肯定会受到编译时间的影响

sqlx 真的很好,但是你肯定会受到编译时间的影响

“sqlx 真的很好,但是你肯定会受到编译时间的影响”。在我以前的工作中大量使用 sqlx 之后,这确实引起了我的共鸣。 即使使用 Ryzen 3700,"cargo check" 时间也从 5 秒增加到 10 秒再到 20 秒,虽然 cargo sqlx prepare 远程数据库是休息一下的好借口。 但是我们必须做点什么…… -- CosmicHorror


文章说的问题出现在 sqlx v0.5-v0.6 上, sqlx 的主要卖点之一是它可以针对实际数据库执行编译时查询检查。这意味着如果你有这样的代码:

use sqlx::{Result, SqliteConnection};

struct User {
    id: i64,
    name: String,
}

async fn get_user_by_id(db: &mut SqliteConnection, id: i64) -> Result<User> {
    sqlx::query_as!(
        User,
        "SELECT id, name FROM User WHERE id = ?",
        id,
    )
    .fetch_one(db)
    .await
}

并使用 DATABASE_URL env var 设置为您的数据库 URL 进行编译,然后它将在编译时连接到数据库以验证查询是否有效以及 Rust 类型是否与数据库的返回类型匹配。 如果您的查询无效,或者您的数据库类型与其对应的 Rust 不匹配,那么您将遇到编译时错误。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值