Rust 입문 초보자가 YouTube 생방송으로 웹 개발 3시간째
방송 아카이브↓
【생방송 아카이브】 Rust 로 Web 개발에 입문했습니다 ② 고생하면서 데이터베이스에 액세스… 힘들었습니다…
htps: //같다. 베 / z0 256도 Y
이전 기사
Rust 입문 초보자가 YouTube 생방송으로 웹 개발 입문 1시간째, 2시간째
htps : // 코 m / 야스 - 츠 츠 베 / ms / bd0 아 95f7c537b19d3 a8
Rust의 데이터베이스 액세스
공식 페이지에는 다음 중 하나를 선택하면 좋다고 적혀있다.
MySQL을 사용하고 싶기 때문에 Diesel이라는 것을 선택
Diesel 사용법
공식 페이지에서 Getting Started.
Cargo.toml 편집
Cargo.toml
[dependencies]
diesel = { version = "1.4.4", features = ["mysql"] }
dotenv = "0.15.0"
diesel cli 설치
migration 등에 필요
cargo install diesel_cli
.env 준비
echo DATABASE_URL=mysql://username:password@localhost/diesel_demo > .env
Database 설정
diesel setup
Migration 파일 만들기
diesel migration generate create_posts
migrations/
폴더에 파일이 작성됩니다.up.sql
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
published BOOLEAN NOT NULL
)
down.sql
DROP TABLE posts;
Migration 실행
diesel migration run
또한, migration 명령은
diesel migration revert # rollback
diesel migration redo # ロールバックしつつ再度migrate
등이있는 것 같습니다.
Rocket에 설정 추가
Rocket.toml
[global.databases.my_db]
url = "mysql://root:@localhost/diesel_demo"
src/lib.rs
#[macro_use]
extern crate diesel;
extern crate dotenv;
use diesel::prelude::*;
use dotenv::dotenv;
use std::env;
pub mod schema;
pub mod models;
src/models.rs
#[derive(Queryable)]
pub struct Post {
pub id: i32,
pub title: String,
pub body: String,
pub published: bool,
}
GET에서 Post를 얻는 과정을 작성해보십시오.
src/main.rs
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
#[macro_use] extern crate rocket_contrib;
use rocket::http::RawStr;
use rocket::Request;
use serde::Serialize;
use rocket_contrib::json::Json;
use rocket_contrib::databases::diesel;
use self::hello_rocket::models::Post;
use diesel::prelude::*;
#[database("my_db")]
struct MyDbConn(diesel::MysqlConnection);
#[get("/posts/<_id>")]
fn get_post(conn: MyDbConn, _id: i32) -> String {
use hello_rocket::schema::posts::dsl::*;
let result = posts.find(_id)
.first::<Post>(&*conn);
match result {
Ok(v) => format!("Post {}", v.title),
Err(e) => format!("{}", e)
}
}
fn main() {
rocket::ignite().mount("/", routes![get_post])
.attach(MyDbConn::fairing())
.launch();
}
데이터베이스에서
posts
테이블에 데이터 만들기(id = 1)이제
cargo run
를 수행하고 http://localhost:8000/posts/1
에 액세스하면 Post <title>
가 표시됩니다.단지 이것만을 위해 이번 생방송은 굉장히 힘들었다…
실제 고통스럽게 하고 싶은 모습을 보고 싶은 분은 동영상을 봐 주세요
Reference
이 문제에 관하여(Rust 입문 초보자가 YouTube 생방송으로 웹 개발 3시간째), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yassun-youtube/items/1065598e0f5b76372f04텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)