やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rust自習(diesel 5 SQLite3 ORM)

 データを取得する。

成果物

コード

 以下ファイルを新規作成する。

src/bin/show_post.rs

extern crate diesel;
extern crate diesel_hello;

use self::diesel::prelude::*;
use self::diesel_hello::models::*;
use self::diesel_hello::*;

fn main() {
    use diesel_hello::schema::posts::dsl::*;

    let connection = establish_connection();
    let results = posts
        .filter(is_published.eq(true))
        .limit(5)
        .load::<Post>(&connection)
        .expect("Error loading posts");

    println!("Displaying {} posts", results.len());
    for post in results {
        println!("{}", post.title);
        println!("----------\n");
        println!("{}", post.body);
    }
}

 is_publishtrueのレコードのみ表示する。

実行

cargo run --bin show_posts
Displaying 1 posts
記事のタイトル
----------

記事の本文。
複数行を書く。
Ctrl+dキーで終了。
最終行。

表示されないデータを作る

cargo run --bin write_post
$ cargo run --bin write_post
    Finished dev [unoptimized + debuginfo] target(s) in 0.57s
     Running `target/debug/write_post`
タイトル> 
ドラフトだから表示されない

本文(終了:CTRL+D)

見せられないよ!

保存した。ドラフト「ドラフトだから表示されない」 id: 1
$ sqlite3 /tmp/work/Rust.Diesel.20190727130150/src/4/diesel_hello/db.sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> select * from posts;
1|記事のタイトル|記事の本文。
複数行を書く。
Ctrl+dキーで終了。
最終行。
|1
2|ドラフトだから表示されない|見せられないよ!
|f

 published_postを実行しない初期状態ならis_publishedfである。これはshow_postsで表示されないはず。

表示されないか確認

$ cargo run --bin show_posts
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
     Running `target/debug/show_posts`
Displaying 1 posts
記事のタイトル
----------

記事の本文。
複数行を書く。
Ctrl+dキーで終了。
最終行。

 is_publishedtrueでないレコードは表示されない。成功!

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで