Note: This site is currently "Under construction". I'm migrating to a new version of my site building software. Lots of things are in a state of disrepair as a result (for example, footnote links aren't working). It's all part of the process of building in public. Most things should still be readable though.

Query A DATETIME Field In MySQL With Rust's Diesel Crate

Code

use chrono::NaiveDateTime;
use diesel::prelude::*;

#[derive(Queryable, Debug)]
pub struct TestItem2 {
    pub id: i32,
    pub data: Option<NaiveDateTime>,
}

Code

[dependencies]
chrono = "0.4.24"
diesel = { version = "2.0.0", features = ["mysql", "serde_json", "chrono"] }
dotenvy = "0.15"

Code

CREATE TABLE test2 (
  id INT PRIMARY KEY,
  datetime DATETIME
)

Code

use bluesky_feed_sorter::database::establish_connection;
use bluesky_feed_sorter::models::*;
use bluesky_feed_sorter::schema::test2::dsl::*;
use diesel::prelude::*;

fn main() {
    println!("Connecting");
    let conn = &mut establish_connection();
    let results = test2.load::<TestItem2>(conn).expect("Error loading posts");
    for result in results {
        dbg!(result);
    }
}

Code

use diesel::prelude::*;
use dotenvy::dotenv;
use std::env;

pub fn establish_connection() -> MysqlConnection {
    dotenv().ok();
    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
    MysqlConnection::establish(&database_url)
        .unwrap_or_else(|_| panic!("Error connecting to database"))
}

References