Berikut panduan untuk membantu Anda memulai menggunakan database SQL di Rust.

Saat Anda membangun lebih banyak program Rust, Anda mungkin perlu berinteraksi dengan database untuk penyimpanan dan pengambilan data.

Pengetikan Rust yang kuat, keamanan memori, dan kinerja, dikombinasikan dengan dukungannya untuk operasi asinkron, ORM, dan migrasi, memungkinkan pemrosesan data yang efisien dan terukur, menjadikan Rust pilihan yang sangat baik untuk membangun basis data aplikasi.

Pengantar Menggunakan Database SQL di Rust

Ada banyak peti database dan perpustakaan di ekosistem Rust yang menyediakan dukungan untuk berbagai paradigma database.

Untuk database SQL, Anda dapat memilih antara driver database seperti Libpq, Konektor MySQL, Dan sqlite3 yang menyediakan antarmuka untuk program Rust untuk berinteraksi dengan database secara langsung tanpa lapisan abstraksi apa pun pada SQL dan ORM (Object-Relational Mappers) seperti Diesel, Sqlx, Dan Rust-postgres yang menyediakan cara mudah untuk bekerja dengan basis data Tipe data karat seperti struct dan function.

instagram viewer

ORM Diesel adalah salah satu paket database paling populer di ekosistem Rust. Sebagai ORM, Diesel menyediakan fitur mulai dari pembuatan kueri dan eksekusi hingga definisi model dan migrasi skema database, sehingga memudahkan Anda untuk berinteraksi dengan database dan menulis kode yang efisien, bersih, dan mudah dirawat.

Diesel juga mendukung beberapa mesin basis data termasuk PostgreSQL, MySQL, dan SQLite, dan menyediakan serangkaian fitur yang kuat untuk menangani operasi database yang kompleks seperti transaksi, gabungan, dan fungsi agregat.

Dengan alat canggih, fitur, dan dokumentasi yang sangat baik, Diesel telah menjadi pilihan utama bagi banyak pengembang Rust yang ingin membangun aplikasi berbasis data yang tangguh dan dapat diskalakan.

Memulai Dengan Diesel

Anda harus menambahkan diesel Dan dotenv peti ke dependensi proyek Anda di bagian dependensi Anda cargo.toml mengajukan.

[ketergantungan]
diesel = { versi = "1.4.4", fitur = ["sqlite"] }
dotenv = "0.15.0"

Setelah menambahkan peti sebagai dependensi, Anda harus menginstal diesel_cli Alat CLI untuk berinteraksi dengan Diesel.

Jalankan perintah ini untuk menginstal diesel_cli alat:

kargo menginstal diesel_cli

Anda dapat memanggil alat CLI dengan diesel perintah setelah menginstal alat.

Selanjutnya, buat file variabel lingkungan dan tentukan URL database Anda.

Jalankan perintah ini untuk membuat dan menyisipkan URL database untuk database SQLite dalam memori.

gema DATABASE_URL=database.db > .env

Untuk bekerja dengan Diesel, Anda harus menginstal sqlite3 atau database pilihan Anda di komputer Anda.

Terakhir, jalankan mempersiapkan perintah untuk Diesel untuk mengatur database untuk proyek Anda:

pengaturan diesel

Itu mempersiapkan perintah menciptakan a migrasi direktori, membuat database yang ditentukan dalam DATABASE_URL, dan menjalankan migrasi yang ada.

Menyiapkan Migrasi Dengan Diesel

Setelah mengatur database Anda dengan Diesel, Anda akan menggunakan migrasi menghasilkan perintah untuk menghasilkan file migrasi. Anda akan menambahkan nama file sebagai argumen:

migrasi diesel menghasilkan create_humans

Perintah menghasilkan dua file SQL di migrasi direktori: up.sql Dan down.sql.

Anda akan menulis SQL untuk definisi tabel database Anda di up.sql mengajukan:

-- SQL Anda ada di sini

MEMBUATMEJA"manusia"
(
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"nama_pertama" TEKS BUKAN NULL,
"last_name" TEKS BUKAN NULL,
"usia" INTEGER BUKAN NULL
);

Anda akan menulis kode SQL untuk menghapus tabel database di down.sql mengajukan:

-- turun.sql

-- File ini harus membatalkan apa pun di `up.sql`
MENJATUHKANMEJA"manusia"

Setelah menulis file SQL, jalankan migrasi berjalan perintah untuk menerapkan migrasi yang tertunda.

menjalankan migrasi diesel

Selain itu, Anda dapat menggunakan ulang migrasi perintah untuk mengembalikan migrasi:

ulang migrasi diesel

Juga, Anda dapat menggunakan cetak-skema perintah untuk mencetak skema. Perintah mencetak isi dari schema.rs mengajukan.

skema cetak diesel

Keluaran dari skema_cetak perintah adalah kode Rust yang cocok dengan skema SQL Anda:

Menghubungkan ke Database SQL Anda Dengan Diesel

Pertama, tambahkan impor dan arahan ini ke file Anda:

mod skema;

#[penggunaan_makro]
eksternalpeti solar;
menggunakan dotenv:: dotenv;
menggunakan diesel:: pendahuluan::*;
menggunakan std:: env;
menggunakan Diesel::{Koneksi, Metode Ekspresi, QueryDsl, RunQueryDsl, SqliteConnection};
menggunakan peti:: skema:: manusia;

Anda akan menggunakan impor dan arahan untuk terhubung ke database Anda dan melakukan operasi.

Inilah cara Anda dapat terhubung ke database SQLite dengan fungsi dan mengembalikan instance koneksi:

menggunakan std:: env;
menggunakan diesel::{Koneksi, SqliteConnection};

fnmembangun_koneksi() -> SqliteConnection {
dotenv().ok();

membiarkan database_url = env:: var("DATABASE_URL")
.mengharapkan("DATABASE_URL harus disetel");
SqliteConnection:: tetapkan(&database_url)
.unwrap_or_else(|_| panik!("Kesalahan menghubungkan ke {}", database_url))
}

Itu membangun_koneksi fungsi mengembalikan instance koneksi struct (Koneksi SQLite). Itu membangun_koneksi memuat variabel lingkungan dengan Oke fungsi, mengakses URL database dengan var fungsi, dan membuat koneksi dengan database melalui URL dengan mendirikan fungsi.

Setelah koneksi berhasil, Anda dapat menjalankan kueri dan memasukkannya ke dalam database Anda.

Memasukkan Nilai ke Database Dengan Diesel

Anda akan menggunakan struct yang cocok dengan skema SQL Anda untuk memasukkan nilai ke dalam database Anda.

Inilah struct yang cocok dengan manusia skema tabel:

#[turunan (Dapat Ditanyakan)]
pubstructManusia {
pub pengenal: i32,
pub nama depan: Rangkaian,
pub nama keluarga: Rangkaian,
pub usia: i32,
}

Fungsi penyisipan akan mengembalikan turunan dari Manusia tipe untuk operasi lainnya.

Anda memerlukan struct untuk fungsi penyisipan Anda; struct akan mengimplementasikan dua atribut makro, satu untuk fungsi penyisipan dan yang lainnya mengidentifikasi tabel untuk operasi.

Inilah struct untuk operasi penyisipan:

#[derive (Dapat disisipkan)]
#[nama_tabel = "manusia"]
structManusia Baru<'A> {
nama depan: &'Astr,
nama keluarga: &'Astr,
usia: i32,
}

Fungsi penyisipan Anda akan mengambil contoh koneksi dan data yang ingin Anda masukkan ke dalam database. Masukkan data dan cetak pesan berdasarkan status operasi.

fnMasukkan ke dalam<'A>(sambungan: &SqliteConnection, nama_pertama: &'Astr, nama keluarga: &'Astr, usia: i32) -> Manusia {
menggunakan peti:: skema:: manusia;

membiarkan manusia_baru = Manusia Baru {
nama depan,
nama keluarga,
usia,
};

diesel:: masukkan_ke (manusia:: tabel).nilai(&manusia_baru).jalankan (koneksi).harapkan("Kesalahan memasukkan manusia baru");

manusia:: table.order (manusia:: id.desc()).pertama (koneksi).unwrap()
}

Itu Masukkan ke dalam fungsi mengambil parameter dan memasukkan nilai ke dalam database dengan Diesel Masukkan ke dalam fungsi yang mengambil dalam tabel dan nilai-nilai fungsi yang mengambil contoh struct. Fungsi menetapkan ID dalam urutan menurun dengan deskripsi fungsi sebelum menjalankan operasi.

Ini dia utama fungsi yang memanggil Masukkan ke dalam fungsi:

fnutama() {
membiarkan conn = membangun_koneksi();
membiarkan manusia_baru = sisipkan_ke(&koneksi, "Yohanes", "Kelinci betina", 25);
cetak!("Manusia baru disisipkan dengan ID: {}", manusia_baru.id);

}

Itu samb variabel adalah contoh koneksi, dan manusia_baru variabel adalah pemanggilan fungsi. Itu utama function mencetak ID setelah operasi berhasil.

Menanyakan Database Dengan Diesel

Alternatifnya, struct fungsi kueri Anda akan mengimplementasikan Dapat ditanyakan atribut dengan a memperoleh makro.

Inilah struct untuk operasi kueri:

// Tentukan struct yang mewakili baris dalam tabel Anda
#[turunan (Dapat Ditanyakan)]
structManusia {
pengenal: i32,
nama depan: Rangkaian,
nama keluarga: Rangkaian,
usia: i32,
}

Fungsi kueri akan mengambil contoh koneksi dan mengembalikan a Manusia struktur sebagai berikut:

fnkueri_db(sambungan: &SqliteConnection) -> Manusia {
manusia.filter (usia.eq(25)).pertama (sambungan).berharap("Kesalahan meminta basis data")
}

Itu kueri_db fungsi memfilter tabel manusia untuk baris tempat usia sama dengan 25 dan mengembalikan kejadian pertama sebagai instance struct.

fnutama() {

membiarkan conn = membangun_koneksi();
membiarkan orang = query_db(&conn);

cetak!("PENGENAL: {}", person.id);
cetak!("Nama depan: {}", orang.nama_pertama);
cetak!("Nama keluarga: {}", orang.nama_belakang);
cetak!("Usia: {}", orang.umur);
}

Dalam utama fungsi, yang orang variabel memanggil kueri_db fungsi dan mencetak bidang baris dengan nilai usia sama dengan 25.

Anda Dapat Membangun Server Web Dengan Rust

Rust terus mendapatkan popularitas dalam pengembangan web sebagai bahasa sisi server dengan perpustakaan seperti Actix-web Dan Roket yang membuatnya lebih mudah untuk mengatur server dan membangun API dan situs web dengan mengabstraksi fungsionalitas kompleks.

Sebagian besar server web harus berinteraksi dengan database untuk penyimpanan dan pengambilan data. Anda selanjutnya dapat mengintegrasikan aplikasi bertenaga Diesel Anda dengan Actix-web atau Rocket untuk membangun aplikasi web yang canggih.