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 不匹配,那么您将遇到编译时错误。