rust から mysql にアクセス

rust

macOS Catalina でやる方法です。

まず、mysqlをインストール

% brew install mysql

そんで、
id と name カラムを持つ、usersというテーブルを作ります。

以下のソースを用意して

% cargo run

すると、usersテーブルのidとnameが表示されます。

main.rs

// extern crate diesel;

use crate::utils::establish_connection;

use diesel::deserialize::QueryableByName;
use diesel::mysql::MysqlConnection;
use diesel::prelude::*;
use diesel::sql_query;
use diesel::sql_types::Integer;
use diesel::sql_types::Text;

mod utils;

type DB = diesel::mysql::Mysql;

#[derive(Debug)]
pub struct User {
    id: i64,
    name: String,
}

impl QueryableByName for User {
    fn build>(
        row: &R,
    ) -> diesel::deserialize::Result {
        Ok(User {
            id: row.get("id")?,
            name: row.get("name")?,
        })
    }
}

fn main() {
    simple_sql();
}

fn simple_sql() {
    let connection: MysqlConnection = establish_connection();
    let users: Vec = sql_query(
        "
        SELECT
            id,
            name
        FROM
            users
        ",
    )
    .load(&connection)
    .unwrap();

    for user in users.iter() {
       println!("{}", user.id);
       println!("{}", user.name);
    }
}

これは、mysqlのid, password が root, db名は hogedb としましたが、
実際は各自の環境の値に修正してください

utils.rs

use diesel::mysql::MysqlConnection;
use diesel::prelude::*;

pub fn establish_connection() -> MysqlConnection {
    let database_url = "mysql://root:root@127.0.0.1/hogedb";

    MysqlConnection::establish(&database_url)
        .expect(&format!("Error connecting to {}", database_url))
}

Cargo.toml

[dependencies]
diesel = { version = "*", features = ["mysql"] }

おすすめの rust の本

タイトルとURLをコピーしました