データを削除する。
成果物
コード
以下ファイルを新規作成する。
src/bin/delete_post.rs
extern crate diesel; extern crate diesel_hello; use self::diesel::prelude::*; use self::diesel_hello::*; use std::env::args; fn main() { use diesel_hello::schema::posts::dsl::*; let target = args().nth(1).expect("Expected a target to match against"); let pattern = format!("%{}%", target); let connection = establish_connection(); let num_deleted = diesel::delete(posts.filter(title.like(pattern))) .execute(&connection) .expect("Error deleting posts"); println!("Deleted {} posts", num_deleted); }
引数を1つもらう。それはタイトルに部分一致させる文字列。つまり、指定した文字列がタイトルに含まれた記事データを削除する。
実行
削除する記事データをつくる
$ cargo run --bin write_post Compiling diesel_hello v0.1.0 (/tmp/work/Rust.Diesel.20190727130150/src/3/diesel_hello) Finished dev [unoptimized + debuginfo] target(s) in 11.82s Running `target/debug/write_post` タイトル> 削除予定の記事ですわ 本文(終了:CTRL+D) これ、消しますわ。 保存した。ドラフト「削除予定の記事ですわ」 id: 1
$ sqlite3 ./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
記事は追加できた。
バグ発見
write_post
で記事を作成したときid: 1
と表示されたが、DBファイルをみると実際は2
である。
保存した。ドラフト「削除予定の記事ですわ」 id: 1
2|削除予定の記事ですわ|これ、消しますわ。|f
おそらく表示しているのは対象レコード件数1
であって、id
ではない。
まあいいか。
削除してみる
$ cargo run --bin delete_post ですわ ... Deleted 1 posts
sqlite> select * from posts; 1|記事のタイトル|記事の本文。 複数行を書く。 Ctrl+dキーで終了。 最終行。 |1
タイトルにですわ
を含む記事が削除された。成功!
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- rustc 1.36.0 (a53f9df32 2019-07-03)
- cargo 1.36.0 (c4fcfb725 2019-05-15)
$ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
前回まで
- Rust学習まとめ(ドキュメント)
- Rust自習(じゃんけんゲーム1)
- Rust自習(双方向リスト1)
- Rust自習(単方向リスト1)
- Rust自習(単方向リスト2)
- Rust自習(単方向リスト3)
- Rust自習(単方向リスト4)
- Rust自習(単方向リスト5)
- Rust自習(単方向リスト6)
- Rust自習(単方向リスト7)
- Rust自習(リストのインタフェースを考える)
- Rust自習(連結リスト1)
- Rust自習(連結リスト2)
- Rust自習(連結リスト3)
- Rust自習(連結リスト4)
- Rust自習(連結リストの取得系インタフェース考察)
- Rust自習(連結リスト5)
- Rust自習(連結リストの取得系インタフェース考察2)
- Rust自習(連結リスト6)
- Rust自習(連結リスト7)
- Rust自習(連結リスト8)
- Rust自習(連結リスト9)
- Rust自習(変数名でイテレートする方法)
- Rust自習(iter、iter_mut実装方法)
- Rust自習(連結リスト10)
- Rust自習(rev()実装できず)
- Rust自習(cycle()実装できず)
- Rust自習(じゃんけんゲーム2)
- Rust自習(じゃんけんゲーム3)
- Rust自習(じゃんけんゲーム4)
- Rust自習(じゃんけんゲーム5)
- Rust自習(じゃんけんゲーム6)
- Rust自習(じゃんけんゲーム7)
- Rust自習(じゃんけんゲーム8)
- Rustのアップデート(rustup update)
- Rust自習(SQLite3 1)
- Rust自習(SQLite3 2)
- Rust自習(SQLite3 3)
- Rust自習(日時 1 chrono)
- Rust自習(日時 2 chrono)
- Rust自習(日時 3 chrono)
- Rust自習(日時 4 chrono)
- Rust自習(日時 5 chrono)
- Rust自習(日時 6 chrono)
- Rust自習(日時 7 chrono)
- Rust自習(std::time::SystemTime)
- Rust自習(std::time::Instant)
- Rust自習(std::time::Duration)
- Rust自習(シリアライズ serde 1)
- JSON5とは?
- Rust自習(シリアライズ serde 2 JSON5)
- Rust自習(シリアライズ serde 3 chrono日時型変換)
- Rust自習(diesel 1 SQLite3 ORM)
- Rust自習(diesel 2 SQLite3 ORM)
- Rust自習(diesel 3 SQLite3 ORM)