العمل مع قواعد البيانات في Swift: PostgreSQL و MongoDB

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: قواعد البيانات في نظام Swift البيئي



لقد تجاوزت Swift منذ فترة طويلة مجرد تطوير تطبيقات الهاتف المحمول. مع ظهور أطر العمل الخادمية مثل Vapor و Perfect، أصبحت اللغة أداة كاملة لبناء الواجهات الخلفية. ومع ذلك، فإن العمل مع قواعد البيانات في Swift له خصائصه الخاصة. على عكس Python أو JavaScript، لا توجد برامج تشغيل مدمجة هنا - يتم حل كل شيء من خلال الحزم الخارجية.



في هذه المقالة، سنشرح كيفية الاتصال بنظامي إدارة قواعد بيانات شائعين: PostgreSQL العلائقية و MongoDB الموجهة للمستندات. ستتعرف على المكتبات التي يجب استخدامها، وكيفية إعداد الاتصال وتنفيذ عمليات CRUD الأساسية. الأمثلة موجهة لنظامي iOS/macOS، لكن الكود سيعمل أيضًا في البيئة الخادمية.



PostgreSQL في Swift: الكلاسيكية عبر Vapor و Fluent



اختيار المكتبة

للعمل مع PostgreSQL في Swift، المعيار الفعلي هو Fluent - ORM من إطار عمل Vapor. يدعم Fluent PostgreSQL و MySQL و SQLite و MongoDB (عبر برنامج تشغيل منفصل). إذا كنت بحاجة إلى العمل بدون Vapor، استخدم PostgresClientKit - برنامج تشغيل منخفض المستوى.



إعداد الاتصال

أضف التبعية في Package.swift:

.package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")


التكوين الأساسي في configure.swift:

import Fluentimport FluentPostgresDriverimport Vapor

public func configure(_ app: Application) throws { app.databases.use(.postgres( hostname: "localhost", port: 5432, username: "swift_user", password: "secret", database: "swift_db" ), as: .psql) // إضافة الترحيلات app.migrations.add(CreateUser())}


عمليات CRUD على مثال نموذج User

لنقم بإنشاء نموذج وترحيل:

final class User: Model, Content {    static let schema = "users"        @ID(key: .id)    var id: UUID?        @Field(key: "name")    var name: String        @Field(key: "email")    var email: String        init() { }        init(id: UUID? = nil, name: String, email: String) {        self.id = id        self.name = name        self.email = email    }}

struct CreateUser: Migration { func prepare(on database: Database) -> EventLoopFuture<Void> { database.schema("users") .id() .field("name", .string, .required) .field("email", .string, .required) .create() } func revert(on database: Database) -> EventLoopFuture<Void> { database.schema("users").delete() }}


مثال على استعلام في المتحكم:

// إنشاء مستخدمlet user = User(name: "Алексей", email: "alex@example.com")try await user.save(on: req.db)

// البحث عن جميع المستخدمينlet users = try await User.query(on: req.db).all()

// التصفية حسب البريد الإلكترونيlet filtered = try await User.query(on: req.db) .filter(\\.$email == "alex@example.com") .first()


هام: يستخدم Fluent التزامن غير المتزامن عبر EventLoopFuture أو async/await (بدءًا من Vapor 4.60+). تأكد من أن بيئتك تدعم Swift 5.5+.



MongoDB في Swift: مرونة المستندات مع MongoKitten



اختيار برنامج التشغيل

بالنسبة لـ MongoDB، المكتبة الرئيسية هي MongoKitten. وهي تدعم جميع الإصدارات الحديثة من MongoDB، بما في ذلك Atlas (الإصدار السحابي). البديل هو MongoSwift من MongoDB Inc.، لكن MongoKitten تعتبر أكثر "سويفتية" من حيث الأسلوب.



الاتصال بقاعدة البيانات

أضف إلى Package.swift:

.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "7.0.0")


مثال على الاتصال (لنظامي iOS/macOS):

                

المدونات

توصيات الكتب