rust - 我如何使用Diesel的主键以外的其他列查找值?

标签 rust rust-diesel

我有一个用户表,希望使用Diesel执行搜索以确保用户名尚未被使用。我发现执行查询的唯一方法是使用find()函数,该函数使用主键。是否有另一个函数可以使用其他字段(类似于SELECT * FROM users WHERE username = foo)进行搜索?
这是我的用户表:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE users (
    user_id uuid PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL UNIQUE,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(60) NOT NULL
);
这是我正在使用的Rust结构:
#[derive(Queryable, AsChangeset, Deserialize, Serialize)]
#[table_name = "users"]
pub struct User {
    pub user_id: uuid::Uuid,
    pub username: String,
    pub password: String,
}

#[derive(Insertable, Deserialize, Serialize)]
#[table_name = "users"]
pub struct InsertableUser {
    pub username: String,
    pub password: String,
}

最佳答案

Diesel提供了一种通用的 .filter 方法,让您构造任意复杂的where子句。
对于您的示例查询,您寻找类似的内容:

users::table.filter(users::username.eq("foo"))

关于rust - 我如何使用Diesel的主键以外的其他列查找值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65723826/

相关文章:

mysql - 为什么 rustc 没有将 libmariadb 包含到发布二进制文件中?

postgresql - 带有 Postgres 的 Rust 柴油机库中的时间戳

closures - 如果参数是按值获取的,为什么还要费心使用 `FnMut`?

rust - "Does not live long enough"`Weak<RefCell<_>>` 错误

mysql - 如何使用 Diesel 创建和解析原始 SQL 查询?

rust - 柴油 : BoxableExpressions generic over a table and its joins?

join - Diesel 连接无法推断类型

rust - 如何使用 Serde 将字段解析为字符串?

rust - 将本地类型推断移出结构

rust - 如何重组结构,使得 'Cannot borrow ` x` as mutable more than once a time' 不会发生