להלן מדריך שיעזור לך להתחיל להשתמש במסדי נתונים של SQL ב- Rust.

ככל שאתה בונה עוד תוכניות Rust, ייתכן שתצטרך ליצור אינטראקציה עם מסדי נתונים לצורך אחסון ואחזור נתונים.

ההקלדה החזקה של Rust, בטיחות הזיכרון והביצועים, בשילוב עם התמיכה שלה בפעולות אסינכרוניות, ORMs ו הגירות, מאפשרות עיבוד נתונים יעיל וניתן להרחבה, מה שהופך את Rust לבחירה מצוינת לבניית מסד נתונים יישומים.

מבוא לשימוש במאגרי SQL ב- Rust

ישנם ארגזי מסד נתונים וספריות רבים במערכת האקולוגית של Rust המספקים תמיכה בפרדיגמות מסד הנתונים השונות.

עבור מסדי נתונים של SQL, אתה יכול לבחור בין מנהלי התקנים של מסד נתונים כמו Libpq, מחבר Mysql, ו Sqlite3 המספקים ממשק לתוכניות Rust לקיים אינטראקציה עם מסדי נתונים ישירות ללא כל שכבת הפשטה ב-SQL ו-ORMs (Object-Relational Mappers) כמו דִיזֶל, Sqlx, ו חלודה-פוסטגרס המספקים דרך נוחה לעבוד עם מסד נתונים סוגי נתוני חלודה כגון מבנים ופונקציות.

דיזל ORM היא אחת מחבילות מסד הנתונים הפופולריות ביותר במערכת האקולוגית של Rust. בתור ORM, דיזל מספקת תכונות מבניית וביצוע שאילתות ועד להגדרת מודלים והעברת סכימות מסדי נתונים, מה שמקל עליך לקיים אינטראקציה עם מסדי נתונים ו כתוב קוד יעיל, נקי וקל לתחזוקה.

instagram viewer

גם דיזל תומך מנועי מסד נתונים מרובים כולל PostgreSQL, MySQL ו- SQLite, ומספק קבוצה חזקה של תכונות לטיפול בפעולות מסד נתונים מורכבות כמו טרנזקציות, צירוף ופונקציות מצטברות.

עם כלים רבי עוצמה, תכונות ותיעוד מעולה, דיזל הפכה לבחירה המומלצת עבור מפתחי Rust רבים המעוניינים לבנות יישומים חזקים וניתנים להרחבה מונעי נתונים.

תחילת העבודה עם דיזל

תצטרך להוסיף את דִיזֶל ו dotenv ארגזים לתלות של הפרויקט שלך בקטע התלות שלך cargo.toml קוֹבֶץ.

[תלות]
דִיזֶל = { גרסה = "1.4.4", תכונות = ["סקלייט"] }
dotenv = "0.15.0"

לאחר הוספת הארגזים כתלות, עליך להתקין את דיזל_קלי כלי CLI לאינטראקציה עם דיזל.

הפעל פקודה זו כדי להתקין את דיזל_קלי כְּלִי:

מטען להתקין diesel_cli

אתה יכול לקרוא לכלי CLI עם ה דִיזֶל הפקודה לאחר התקנת הכלי.

לאחר מכן, צור קובץ משתני סביבה וציין את כתובת האתר של מסד הנתונים שלך.

הפעל פקודה זו כדי ליצור ולהכניס את כתובת האתר של מסד הנתונים עבור מסד נתונים של SQLite בזיכרון.

echo DATABASE_URL=database.db > .env

כדי לעבוד עם דיזל, עליך להתקין את sqlite3 או את מסד הנתונים המועדף עליך במחשב שלך.

לבסוף, הפעל את להכין פקודה לדיזל כדי להגדיר מסד נתונים עבור הפרויקט שלך:

הגדרת דיזל

ה להכין הפקודה יוצרת א הגירות ספרייה, יוצרת את מסד הנתונים שצוין ב- DATABASE_URL, ומריץ העברות קיימות.

הגדרת העברות עם דיזל

לאחר הגדרת מסד הנתונים שלך עם דיזל, תשתמש ב- הגירה ליצור פקודה ליצירת קובצי הגירה. אתה תוסיף את שם הקובץ כארגומנט:

נדידת דיזל מייצרת create_humans

הפקודה יוצרת שני קבצי SQL ב- הגירות מַדרִיך: up.sql ו down.sql.

אתה תכתוב SQL עבור הגדרות טבלת מסד הנתונים שלך ב- up.sql קוֹבֶץ:

-- ה-SQL שלך נכנס לכאן

לִיצוֹרשולחן"בן אנוש"
(
"מזהה" שלם לא NULL הגדלה אוטומטית של מפתח ראשי,
"first_name" TEXT NOT NULL,
"last_name" TEXT NOT NULL,
"גיל" שלם לא NULL
);

אתה תכתוב קוד SQL כדי להוריד טבלאות מסד נתונים ב- down.sql קוֹבֶץ:

-- down.sql

-- הקובץ הזה אמור לבטל כל דבר ב-'up.sql'
יְרִידָהשולחן"בן אנוש"

לאחר כתיבת קבצי SQL, הפעל את ריצת הגירה פקודה להחלת העברות ממתינות.

ריצת נדידת סולר

בנוסף, אתה יכול להשתמש ב- הגירה מחדש פקודה לביטול העברות:

נדידת דיזל מחדש

כמו כן, אתה יכול להשתמש ב סכימה הדפסה פקודה להדפסת הסכימה. הפקודה מדפיסה את התוכן של schema.rs קוֹבֶץ.

סכימה להדפסת דיזל

הפלט של ה print_schema הפקודה היא קוד Rust שתואם את סכימת SQL שלך:

התחברות למסד הנתונים של SQL עם דיזל

ראשית, הוסף את הייבוא ​​וההנחיות האלה לקובץ שלך:

mod סכֵימָה;

#[שימוש_מאקרו]
חיצוניאַרְגָז דִיזֶל;
להשתמש dotenv:: dotenv;
להשתמש דיזל:: הקדמה::*;
להשתמש std:: env;
להשתמש דיזל::{Connection, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
להשתמש ארגז:: schema:: אנושי;

אתה תשתמש ביבוא ובהנחיות כדי להתחבר למסד הנתונים שלך ולבצע פעולות.

כך תוכל להתחבר למסד נתונים של SQLite עם פונקציה ולהחזיר מופע חיבור:

להשתמש std:: env;
להשתמש diesel::{חיבור, SqliteConnection};

fnיצירת_חיבור() -> SqliteConnection {
dotenv().ok();

לתת database_url = env:: var("DATABASE_URL")
.לְצַפּוֹת("יש להגדיר DATABASE_URL");
SqliteConnection:: establish(&database_url)
.unwrap_or_else(|_| בהלה!("שגיאה בחיבור אל {}", database_url))
}

ה יצירת_חיבור הפונקציה מחזירה את מבנה מופע החיבור (SqliteConnection). ה יצירת_חיבור טוען את משתני הסביבה עם בסדר פונקציה, ניגש לכתובת האתר של מסד הנתונים עם ה- var פונקציה, ויוצר חיבור עם מסד הנתונים באמצעות כתובת האתר עם ה- לְהַקִים פוּנקצִיָה.

לאחר חיבור מוצלח, תוכל לבצע שאילתות ולהכניס אותן למסד הנתונים שלך.

הוספת ערכים למסד נתונים עם דיזל

תשתמש במבנה התואם לסכימת SQL שלך כדי להוסיף ערכים למסד הנתונים שלך.

הנה מבנה שתואם את בן אנוש סכימת טבלה:

#[נגזר (ניתן לשאילתה)]
פָּאבּstructבן אנוש {
פָּאבּ תְעוּדַת זֶהוּת: i32,
פָּאבּ שם פרטי: חוּט,
פָּאבּ שם משפחה: חוּט,
פָּאבּ גיל: i32,
}

פונקציית ההכנסה תחזיר מופע של בן אנוש סוג עבור פעולות אחרות.

תזדקק למבנה עבור פונקציית ההכנסה שלך; ה-struct יישם שתי תכונות מאקרו, האחת עבור פונקציונליות ההכנסה והשנייה המזהה את הטבלה עבור הפעולה.

להלן המבנה עבור פעולת ההחדרה:

#[נגזר (ניתן להכנס)]
#[table_name = "בן אנוש"]
structNewHuman<> {
שם פרטי: &str,
שם משפחה: &str,
גיל: i32,
}

פונקציית ההוספה שלך תיקח מופע חיבור ואת הנתונים שברצונך להכניס למסד הנתונים. הכנס את הנתונים והדפיס הודעה המבוססת על מצב הפעולה.

fnלהכניס לתוך<>(חיבור: &SqliteConnection, first_name: &str, שם משפחה: &str, גיל: i32) -> אנושי {
להשתמש ארגז:: schema:: אנושי;

לתת new_human = NewHuman {
שם פרטי,
שם משפחה,
גיל,
};

diesel:: insert_into (human:: table).values(&new_human).execute (conn).expect("שגיאה בהכנסת אדם חדש");

human:: table.order (human:: id.desc()).first (conn).unwrap()
}

ה להכניס לתוך הפונקציה לוקחת את הפרמטרים ומכניסה את הערכים למסד הנתונים עם דיזל להכניס לתוך פונקציה שמקבלת את הטבלה ואת ערכים פונקציה שלוקחת מופע struct. הפונקציה מקצה את המזהה בסדר יורד עם ה- desc פונקציה לפני ביצוע הפעולה.

הנה ה רָאשִׁי פונקציה שקוראת ל- להכניס לתוך פוּנקצִיָה:

fnרָאשִׁי() {
לתת conn = establish_connection();
לתת new_human = insert_into(&conn, "ג'ון", "צְבִיָה", 25);
println!("אדם חדש הוכנס עם מזהה: {}", new_human.id);

}

ה קשר המשתנה הוא מופע חיבור, וה- אדם_חדש המשתנה הוא קריאת הפונקציה. ה רָאשִׁי הפונקציה מדפיסה את המזהה לאחר פעולה מוצלחת.

חיפוש מאגרי מידע עם דיזל

לחלופין, מבנה פונקציית השאילתה שלך יישם את ה ניתן לשאילתה תכונה עם א לְהָפִיק מאקרו.

להלן המבנה עבור פעולת השאילתה:

// הגדר מבנה המייצג שורה בטבלה שלך
#[נגזר (ניתן לשאילתה)]
structבן אנוש {
תְעוּדַת זֶהוּת: i32,
שם פרטי: חוּט,
שם משפחה: חוּט,
גיל: i32,
}

פונקציית השאילתה תיקח מופע חיבור ותחזיר א בן אנוש מבנה באופן הבא:

fnquery_db(חיבור: &SqliteConnection) -> אנושי {
human.filter (age.eq(25)).first (conn).expect("שגיאה בשאילתת מסד נתונים")
}

ה query_db הפונקציה מסננת את הטבלה האנושית עבור השורה שבה גיל שווה ל-25 ומחזיר את המופע הראשון כמופע struct.

fnרָאשִׁי() {

לתת conn = establish_connection();
לתת person = query_db(&conn);

println!("מזהה: {}", person.id);
println!("שם פרטי: {}", person.first_name);
println!("שם משפחה: {}", person.last_name);
println!("גיל: {}", person.age);
}

בתוך ה רָאשִׁי פונקציה, ה אדם המשתנה קורא ל- query_db function ומדפיס את השדות של השורה עם ערך גיל השווה ל-25.

אתה יכול לבנות שרתי אינטרנט עם חלודה

Rust ממשיכה לצבור פופולריות בפיתוח אתרים כשפת שרת עם ספריות כמו Actix-web ו רָקֵטָה שמקלים על הקמת שרתים ובניית ממשקי API ואתרי אינטרנט על ידי הפשטה של ​​פונקציונליות מורכבת.

רוב שרתי האינטרנט צריכים ליצור אינטראקציה עם מסדי נתונים לצורך אחסון ואחזור נתונים. אתה יכול לשלב עוד יותר את האפליקציות המונעות בדיזל עם Actix-web או Rocket כדי לבנות יישומי אינטרנט מתוחכמים.