From 4c5ee6f9084a69826bf1f77674ed5f20065d3eaf Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Fri, 12 Feb 2021 23:17:00 +0800 Subject: [PATCH] feat: insert works --- __database/diesel/Cargo.lock | 16 ++++++++-------- __database/diesel/Cargo.toml | 3 +-- __database/diesel/README.md | 3 +++ __database/diesel/src/main.rs | 25 ++++++++++++------------- __database/diesel/src/models.rs | 11 ++++++++++- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/__database/diesel/Cargo.lock b/__database/diesel/Cargo.lock index 805deb6..0abb66b 100644 --- a/__database/diesel/Cargo.lock +++ b/__database/diesel/Cargo.lock @@ -6,14 +6,6 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" -[[package]] -name = "diesel" -version = "0.1.0" -dependencies = [ - "diesel 1.4.5", - "dotenv", -] - [[package]] name = "diesel" version = "1.4.5" @@ -25,6 +17,14 @@ dependencies = [ "libsqlite3-sys", ] +[[package]] +name = "diesel_demo" +version = "0.1.0" +dependencies = [ + "diesel", + "dotenv", +] + [[package]] name = "diesel_derives" version = "1.4.1" diff --git a/__database/diesel/Cargo.toml b/__database/diesel/Cargo.toml index 420acd2..b1e4bb8 100644 --- a/__database/diesel/Cargo.toml +++ b/__database/diesel/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "diesel" +name = "diesel_demo" version = "0.1.0" authors = ["Hatter Jiang "] edition = "2018" @@ -9,4 +9,3 @@ edition = "2018" [dependencies] diesel = { version = "1.4.5", features = ["sqlite"] } dotenv = "0.15.0" - diff --git a/__database/diesel/README.md b/__database/diesel/README.md index d1c5846..9320bd0 100644 --- a/__database/diesel/README.md +++ b/__database/diesel/README.md @@ -8,3 +8,6 @@ diesel setup --database-url=file:test.db diesel migration generate create_posts diesel migration run --database-url=file:test.db + + +https://github.com/diesel-rs/diesel/tree/master/examples/sqlite/getting_started_step_3 \ No newline at end of file diff --git a/__database/diesel/src/main.rs b/__database/diesel/src/main.rs index 9d0e90e..896db45 100644 --- a/__database/diesel/src/main.rs +++ b/__database/diesel/src/main.rs @@ -8,23 +8,22 @@ use diesel::prelude::*; use diesel::sqlite::SqliteConnection; use dotenv::dotenv; use std::env; -use crate::models::Post; +use crate::models::NewPost; fn main() { - use crate::schema::posts::dsl::*; - let connection = establish_connection(); - let results = posts.filter(published.eq(true)) - .limit(5) - .load::(&connection) - .expect("Error loading posts"); + create_post(&connection, "hello world", "this is a post!"); +} - println!("Displaying {} posts", results.len()); - for post in results { - println!("{}", post.title); - println!("----------\n"); - println!("{}", post.body); - } +pub fn create_post(conn: &SqliteConnection, title: &str, body: &str) -> usize { + use crate::schema::posts; + + let new_post = NewPost { title, body }; + + diesel::insert_into(posts::table) + .values(&new_post) + .execute(conn) + .expect("Error saving new post") } pub fn establish_connection() -> SqliteConnection { diff --git a/__database/diesel/src/models.rs b/__database/diesel/src/models.rs index 9bee09a..1b57fb7 100644 --- a/__database/diesel/src/models.rs +++ b/__database/diesel/src/models.rs @@ -1,7 +1,16 @@ +use crate::schema::posts; + #[derive(Queryable)] pub struct Post { pub id: i32, pub title: String, pub body: String, pub published: bool, -} \ No newline at end of file +} + +#[derive(Insertable)] +#[table_name = "posts"] +pub struct NewPost<'a> { + pub title: &'a str, + pub body: &'a str, +}