Rust में डेटाबेस के साथ काम करना: शुरुआती लोगों के लिए PostgreSQL और MongoDB
\n\nRust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है जो अपने प्रदर्शन और सुरक्षा के कारण लोकप्रियता प्राप्त कर रही है। लेकिन Rust में डेटाबेस के साथ कैसे काम करें? इस लेख में हम दो लोकप्रिय DBMS: रिलेशनल PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB के साथ कनेक्शन और बुनियादी संचालन करने पर चर्चा करेंगे। यह सामग्री Rust की मूल बातों से परिचित शुरुआती डेवलपर्स के लिए है।
\n\nRust और डेटाबेस एक अच्छा संयोजन क्यों हैं?
\n\nRust एक सख्त प्रकार प्रणाली और मेमोरी सुरक्षा गारंटी प्रदान करता है, जो डेटा के साथ काम करते समय विशेष रूप से मूल्यवान है। C/C++ में आम मेमोरी एक्सेस त्रुटियां संकलन चरण में ही समाप्त हो जाती हैं। इसके अलावा, Rust के इकोसिस्टम में डेटाबेस के साथ इंटरैक्शन के लिए परिपक्व लाइब्रेरी शामिल हैं: PostgreSQL के लिए diesel और MongoDB के लिए आधिकारिक ड्राइवर।
इस लेख में हम सीखेंगे:
\n- \n
- Rust से PostgreSQL और MongoDB से कनेक्ट करना \n
- CRUD-संचालन (निर्माण, पढ़ना, अद्यतन, हटाना) करना \n
- क्वेरी परिणामों के साथ सुरक्षित और कुशलतापूर्वक काम करना \n
1. Diesel लाइब्रेरी के माध्यम से PostgreSQL के साथ काम करना
\n\nDiesel Rust के लिए एक ORM और query builder है जो संकलन स्तर पर प्रकार सुरक्षा सुनिश्चित करता है। शुरू करने के लिए Cargo.toml में निर्भरताएँ जोड़ें:
[dependencies]\ndiesel = { version = "2.1", features = ["postgres"] }\ndotenvy = "0.15"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\ntokio = { version = "1.0", features = ["full"] }\n\nकनेक्शन सेटअप
\n\nअपने डेटाबेस URL के साथ एक .env फ़ाइल बनाएँ:
DATABASE_URL=postgres://user:password@localhost/mydb\n\nअब कनेक्शन और तालिका बनाने के लिए कोड लिखते हैं:
\n\nuse diesel::prelude::*;\nuse diesel::pg::PgConnection;\nuse dotenvy::dotenv;\nuse std::env;\n\npub fn establish_connection() -> PgConnection {\n dotenv().ok();\n let database_url = env::var("DATABASE_URL")\n .expect("DATABASE_URL must be set");\n PgConnection::establish(&database_url)\n .unwrap_or_else(|_| panic!("Error connecting to {}", database_url))\n}\n\nस्कीमा और मॉडल की परिभाषा
\n\nएक users तालिका और संबंधित Rust मॉडल बनाते हैं:
// schema.rs\ntable! {\n users (id) {\n id -> Int4,\n name -> Varchar,\n email -> Varchar,\n created_at -> Timestamp,\n }\n}\n\n// models.rs\n#[derive(Queryable, Selectable)]\n#[diesel(table_name = crate::schema::users)]\n#[diesel(check_for_backend(diesel::pg::Pg))]\npub struct User {\n pub id: i32,\n pub name: String,\n pub email: String,\n pub created_at: chrono::NaiveDateTime,\n}\n\n#[derive(Insertable)]\n#[diesel(table_name = crate::schema::users)]\npub struct NewUser {\n pub name: String,\n pub email: String,\n}\n\nCRUD-संचालन
\n\nउपयोगकर्ताओं को बनाने और पढ़ने का उदाहरण:
\n\nuse crate::models::{User, NewUser};\nuse crate::schema::users;\n\npub fn create_user(conn: &mut PgConnection, name: &str, email: &str) -> User {\n let new_user = NewUser {\n name: name.to_string(),\n email: email.to_string(),\n };\n\n diesel::insert_into(users::table)\n .values(&new_user)\n .returning(User::as_returning())\n .get_result(conn)\n .expect("Error saving new user")\n}\n\npub fn get_all_users(conn: &mut PgConnection) -> Vec {\n users::table\n .load::(conn)\n .expect("Error loading users")\n} \n\nजैसा कि आप देख सकते हैं, Diesel संकलन चरण में प्रकार और कॉलम नामों की जाँच करता है। फ़ील्ड नाम में त्रुटि runtime विफलता के बजाय संकलन त्रुटि का कारण बनेगी।
\n\n2. आधिकारिक ड्राइवर के माध्यम से MongoDB के साथ काम करना
\n\nMongoDB एक NoSQL डेटाबेस है जो JSON-जैसे प्रारूप में डेटा संग्रहीत करता है