如何使用 postgres crate 处理查询返回的可选值?

mgu*_*gul 4 postgresql rust

我正在尝试获取查询的值,但该值可能为 NULL,而且我不知道如何在 Rust 中处理它。这是我的代码:

let stmt = conn.prepare("SELECT * FROM pictures").unwrap();

for row in stmt.query(&[]).unwrap() {
    let id: i32 = row.get("id");
    let author: String = row.get("author");
    let description: String = row.get("description");

    let rating: String = row.get("rating");

    let gps_lat: String = row.get("gps_lat");
    let gps_long: String = row.get("gps_long");
    let date_taken: chrono::NaiveDate = row.get("date_taken");

    println!("id        -> {}\n
           author      -> {}\n
           description -> {}\n
           rating      -> {}\n
           gps_lat     -> {}\n
           gps_long    -> {}\n
           date        -> {}\n
       ", id, author, description, rating, gps_lat, gps_long, date_taken);
}
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,第一张图片效果很好,因为评级列不为 NULL。但第二张图片失败并给出“Conversion(WasNull)”,因为没有评级,我尝试将 NULL 转换为 chrono::NaiveDate。

Vla*_*eev 7

如文档中所述:

可空性

除了上面列出的类型之外,FromSql还实现了 Option<T>where TImplements FromSql。AnOption<T>表示可为 null 的 Postgres 值。

请求一个Option<Type>可以为NULL的字段;那么库会自动将 NULL 转换为None

let rating: Option<String> = row.get("rating");
Run Code Online (Sandbox Code Playgroud)