【问题标题】:How to insert and fetch date in a sqlite database using rusqlite?如何使用 rusqlite 在 sqlite 数据库中插入和获取日期?
【发布时间】:2021-07-08 04:56:44
【问题描述】:

我有一个带有 NaiveDate 字段的结构,我想将此字段插入到表中。这是我的全部代码

use chrono::naive::NaiveDate; 
use rusqlite::{params, Connection, Result};

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    date: NaiveDate,
}

fn main()->Result<()>{
    let date_str = "2020-04-12";
    let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();

    let me = Person {
        id: 0,
        name: "Steven".to_string(),
        date: naive_date,
    };
    println!("{:?}",me);
    
    let conn = Connection::open_in_memory()?;
    
        
    conn.execute(
        "CREATE TABLE person (
                  id              INTEGER PRIMARY KEY,
                  name            TEXT NOT NULL,
                  date            TEXT
                  )",
        [],
    )?;
    
    conn.execute(
    "INSERT INTO person (name, date) VALUES (?1, ?2)",
        params![me.name, me.date],
    )?;
    
    let mut stmt = conn.prepare("SELECT id, name, date FROM person")?;
    let person_iter = stmt.query_map([], |row| {
        Ok(Person {
            id: row.get(0)?,
            name: row.get(1)?,
            date: row.get(2)?,
        })
    })?;

    for person in person_iter {
        println!("Found person {:?}", person.unwrap());
    }
    
    Ok(())
}

但它给出了这两个错误

|   the trait `FromSql` is not implemented for `NaiveDate`
|   the trait `ToSql` is not implemented for `NaiveDate`

cargo.toml

chrono = "0.4.19"
rusqlite = "0.25.0"

【问题讨论】:

    标签: rust rust-chrono rusqlite


    【解决方案1】:

    您必须使用附加的 chrono 功能进行编译,才能为 chrono 类型实现 FromSqlToSql 特征。

    将 Cargo.toml 中的声明更改为

    chrono = "0.4.19"
    rusqlite = { version = "0.25.0", features = ["chrono"] }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多