Rust + mysql, diesel で接続する例 #Rust #mysql
■ 概要:
前のRustの関連となり。
mysql + dieselで、操作するメモとなります
■ 環境
Rust
rustc 1.46.0
cargo 1.46.0
diesel
ubuntu 18.04
mysql / MariaDB 10.4.6
■ 参考サイト様
https://diesel.rs/guides/getting-started/
https://mshr-t.hatenablog.jp/entry/2019/06/11/022151
■ diesel 追加
・ 上記の、getting-started/ postgress版 と同様になりますが。
mysql に接続する手順で、DBは、事前に作成した場合の例です
■ Cargo.toml
[dependencies]
diesel = { version = "*", features = ["mysql"] }
・ diesel_cli
cargo install diesel_cli
・migration
diesel migration generate create_posts
・下記のような。フォルダに
migrations/2020-10-01-064939_create_posts/
down.sql, up.sql が、作成されます
・up.sql
CREATE TABLE posts (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
published BOOLEAN NOT NULL DEFAULT 0
);
・down.sql
DROP TABLE posts;
・diesel migration run
成功すると、
src/schema.rs 等が、生成されます。
table! {
posts (id) {
id -> Nullable<Integer>,
title -> Text,
body -> Text,
published -> Bool,
}
}
■ 接続
use diesel::mysql::MysqlConnection;
use diesel::prelude::*;
use dotenv::dotenv;
//
pub fn establish_connection() -> MysqlConnection {
// mysql://user:pass@host/dbname
let database_url = "mysql://db_user:password@127.0.0.1/vue1";
MysqlConnection::establish(&database_url)
.expect(&format!("Error connecting to {}", database_url))
}
database_urlは、
mysql://user:pass@host/dbname
のような、DBに合わせて設定
■ INSERT の例です
#[macro_use]
extern crate diesel;
extern crate dotenv;
pub mod schema;
use diesel::prelude::*;
use diesel::deserialize::QueryableByName;
use diesel::mysql::MysqlConnection;
use diesel::sql_query;
mod lib;
#[derive(Queryable)]
pub struct Post {
pub id: i32,
pub title: String,
pub body: String,
pub published: bool,
}
use schema::posts;
#[derive(Insertable)]
#[table_name="posts"]
pub struct NewPost {
pub title: String,
pub body: String,
}
//
fn main() {
println!("#start-db");
use self::schema::posts::dsl::{id, posts};
let connection = lib::establish_connection();
let new_post = NewPost {
title: "t1".to_string(),
body: "b1".to_string(),
};
diesel::insert_into(posts)
.values(&new_post)
.execute(&connection)
.expect("Error saving new post");
}
■ エラー等、
コンパイル時に、library not found for -lmysqlclient
のようなエラーが出た場合、
apt検索して、apt search libmysqlclient
sudo apt-get install libmysqlclient-dev ,で回避できました。
■ 参考の設定
https://github.com/kuc-arc-f/diesel_test
ここから先は
Rust WebAssembly 開発の事例、ノウハウに関する記事を集めました。第2回 ■ 免責事項 / 注記 , 内容について動作確…
この記事が気に入ったらチップで応援してみませんか?