feat: insert works

This commit is contained in:
2021-02-12 23:17:00 +08:00
parent fb84b0f85e
commit 4c5ee6f908
5 changed files with 34 additions and 24 deletions

View File

@@ -6,14 +6,6 @@ version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
[[package]]
name = "diesel"
version = "0.1.0"
dependencies = [
"diesel 1.4.5",
"dotenv",
]
[[package]] [[package]]
name = "diesel" name = "diesel"
version = "1.4.5" version = "1.4.5"
@@ -25,6 +17,14 @@ dependencies = [
"libsqlite3-sys", "libsqlite3-sys",
] ]
[[package]]
name = "diesel_demo"
version = "0.1.0"
dependencies = [
"diesel",
"dotenv",
]
[[package]] [[package]]
name = "diesel_derives" name = "diesel_derives"
version = "1.4.1" version = "1.4.1"

View File

@@ -1,5 +1,5 @@
[package] [package]
name = "diesel" name = "diesel_demo"
version = "0.1.0" version = "0.1.0"
authors = ["Hatter Jiang <jht5945@gmail.com>"] authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018" edition = "2018"
@@ -9,4 +9,3 @@ edition = "2018"
[dependencies] [dependencies]
diesel = { version = "1.4.5", features = ["sqlite"] } diesel = { version = "1.4.5", features = ["sqlite"] }
dotenv = "0.15.0" dotenv = "0.15.0"

View File

@@ -8,3 +8,6 @@ diesel setup --database-url=file:test.db
diesel migration generate create_posts diesel migration generate create_posts
diesel migration run --database-url=file:test.db diesel migration run --database-url=file:test.db
https://github.com/diesel-rs/diesel/tree/master/examples/sqlite/getting_started_step_3

View File

@@ -8,23 +8,22 @@ use diesel::prelude::*;
use diesel::sqlite::SqliteConnection; use diesel::sqlite::SqliteConnection;
use dotenv::dotenv; use dotenv::dotenv;
use std::env; use std::env;
use crate::models::Post; use crate::models::NewPost;
fn main() { fn main() {
use crate::schema::posts::dsl::*;
let connection = establish_connection(); let connection = establish_connection();
let results = posts.filter(published.eq(true)) create_post(&connection, "hello world", "this is a post!");
.limit(5) }
.load::<Post>(&connection)
.expect("Error loading posts");
println!("Displaying {} posts", results.len()); pub fn create_post(conn: &SqliteConnection, title: &str, body: &str) -> usize {
for post in results { use crate::schema::posts;
println!("{}", post.title);
println!("----------\n"); let new_post = NewPost { title, body };
println!("{}", post.body);
} diesel::insert_into(posts::table)
.values(&new_post)
.execute(conn)
.expect("Error saving new post")
} }
pub fn establish_connection() -> SqliteConnection { pub fn establish_connection() -> SqliteConnection {

View File

@@ -1,7 +1,16 @@
use crate::schema::posts;
#[derive(Queryable)] #[derive(Queryable)]
pub struct Post { pub struct Post {
pub id: i32, pub id: i32,
pub title: String, pub title: String,
pub body: String, pub body: String,
pub published: bool, pub published: bool,
} }
#[derive(Insertable)]
#[table_name = "posts"]
pub struct NewPost<'a> {
pub title: &'a str,
pub body: &'a str,
}