search
LoginSignup
17

More than 1 year has passed since last update.

posted at

updated at

Organization

dieselのサンプル(sqlite)を動かしてみた

rustをポチポチ触り始めました。rustでデータベースを触りたかったのでdieselのサンプルをいじってみました。

リポジトリのexampleにはSQLiteの具体的な手順が書いてなくて多少苦労したので備忘録を兼ねて書きます。

サンプルソース自体の解説はしませんRustのことが全然分かっていないので解説できません。

diesel

Dieselは「A safe, extensible ORM and Query Builder for Rust」らしいです。

rustのORMの中では一番流行っているようなのでこれを選びました。

環境

ubuntu16.04
SQLite 3.11.0
rustup 1.5.0
rustc 1.21.0-nightly
cargo 0.22.0-nightly
diesel 0.15.0

rustcはnightlyでなくても良いかもしれません。

準備

sqlite3をインストールしておいてください。

diesel_cliをインストールしてdieselコマンドを使えるようにします。postgresqlやmysqlが入っていない場合エラーになるので、以下のようにオプションでsqliteだけをターゲットにしましょう。

$ cargo install diesel_cli --no-default-features --features sqlite

プロジェクトを作る

$ cargo new diesel_sample
$ cd diesel_sample

依存

Cargo.toml
[package]
name = "diesel_sample"
version = "0.1.0"
authors = ["techno"]

[dependencies]
diesel = { version = "0.15.0", features = ["sqlite"] }
diesel_codegen = { version = "0.15.0", features = ["sqlite"] }
dotenv = "0.9.0"

データベースを作る

$ echo DATABASE_URL=./sample.db > .env
$ diesel setup

dieselは.envに書かれたURLを元にデータベースに接続するので、データベースのURL(今回はデータベースファイルのパス)を.envに出力後diesel setupを打ちます。

最初DATABASE_URL="./sample.db"と書いたためにエラーを吐かれてしばらくハマりました。

マイグレーション

$ diesel migration generate create_posts

migrationsディレクトリにマイグレーション用のSQLファイルが生成されます。テーブル定義を書いていきます。

up.sql
CREATE TABLE posts (
  id INTEGER NOT NULL PRIMARY KEY,
  title VARCHAR NOT NULL,
  body TEXT NOT NULL,
  published BOOLEAN NOT NULL DEFAULT 0
)
down.sql
DROP TABLE posts

Postgresのサンプルではup.sqlidの型はSERIALなのですがSQLiteは違うので注意です。

$ diesel migration run

書く!

あとはdieselのサンプルコードを写していけばいいのですが2017年7月31日のmasterブランチでの変更がリリースされているものに反映されていないため0.15.xブランチのサンプルでないと動かないので注意です。

具体的にはこのコミットsrc/lib.rsuse diesel::sqlite::SqliteConnection;が消えています。

そのうちmasterのサンプルソースでも動くようになると思います。

動かす

$ cargo run --bin show_posts

のように実行します。

sqlite3を起動してselect * from posts;などで確認しながらサンプルを進めていくと楽しいかもしれません。

ドキュメント

filterselectjoinexecuteなどの関数はdiesel::preludeにある○○Dsl

検索時などに使うeqgtなどはdiesel::expression_methods::global_expression_methods::ExpressionMethods

associationはdiesel::associations

countexistsmaxmixdiesel::expression::dsl

insertupdatedeletedieselの下の方に

にそれぞれあります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
17