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

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

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

ابدأ الدورة
```html

مقدمة في العمل مع قواعد البيانات باستخدام Swift

لم يعد Swift لغة مخصصة فقط لتطوير التطبيقات المحمولة. مع ظهور أطر العمل الخادمية مثل Vapor و Kitura، أصبح Swift أداة متكاملة لإنشاء حلول backend. الجانب الأساسي لأي نظام خادم هو العمل مع قواعد البيانات. في هذه المقالة، سنستعرض كيفية الاتصال والتفاعل مع نظامين شائعين لإدارة قواعد البيانات: PostgreSQL العلائقية و MongoDB الموجهة للمستندات. ستتعرف على المكتبات التي يجب استخدامها، وكيفية إعداد الاتصال وتنفيذ عمليات CRUD الأساسية باستخدام Swift الخالص.

PostgreSQL في Swift: الإعداد والعمليات الأساسية

PostgreSQL هي واحدة من أكثر قواعد البيانات العلائقية موثوقية. للعمل معها في Swift، توجد عدة مكتبات، لكن الأكثر شهرة هي PostgresNIO — وهو مشغل غير متزامن مبني على SwiftNIO. إذا كنت تستخدم إطار العمل Vapor، فإن العمل مع PostgreSQL يصبح أسهل من خلال ORM Fluent.

الاتصال بـ PostgreSQL عبر PostgresNIO

لنبدأ بإضافة التبعية. في ملف Package.swift، أضف:

// swift-tools-version:5.7
import PackageDescription

let package = Package(
    name: "MyApp",
    dependencies: [
        .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.18.0")
    ],
    targets: [
        .target(name: "MyApp", dependencies: [
            .product(name: "PostgresNIO", package: "postgres-nio")
        ])
    ]
)

مثال على الاتصال وتنفيذ استعلام SELECT بسيط:

import PostgresNIO
import NIOCore
import NIOPosix

let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

let config = PostgresConnection.Configuration(
    host: "localhost",
    port: 5432,
    username: "myuser",
    password: "mypassword",
    database: "mydb",
    tls: .disable
)

let connection = try await PostgresConnection.connect(
    on: eventLoopGroup.next(),
    configuration: config
)

let rows = try await connection.query("SELECT id, name FROM users LIMIT 5;", logger: nil)

for try await row in rows {
    let id: Int = try row["id"].decode(Int.self)
    let name: String = try row["name"].decode(String.self)
    print("User: \(id) - \(name)")
}

العمل مع Vapor Fluent (ORM)

يوفر Fluent واجهة برمجة تطبيقات عالية المستوى للعمل مع PostgreSQL. سيكون نموذج المستخدم على النحو التالي:

import Fluent
import Vapor

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
    }
}

// إنشاء سجل
let user = User(name: "إيفان", email: "ivan@example.com")
try await user.save(on: req.db)

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

MongoDB في Swift: العمل مع المستندات

MongoDB هي قاعدة بيانات NoSQL تخزن البيانات بتنسيق BSON (JSON ثنائي). بالنسبة لـ Swift، يوجد مشغل رسمي MongoSwift تم تطويره بواسطة MongoDB Inc. وهو يدعم العمليات غير المتزامنة والوضع المتزامن.

تثبيت والاتصال بـ MongoSwift

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

dependencies: [
    .package(url: "https://github.com/mongodb/mongo-swift-driver.git", from: "1.3.0")
],
targets: [
    .target(name: "MyApp", dependencies: [
        .product(name: "MongoSwift", package: "mongo-swift-driver")
    ])
]

مثال على الاتصال بـ MongoDB المحلي وإدراج مستند:

import MongoSwift

let client = try MongoClient("mongodb://localhost:27017")
let db = client.db("mydatabase")
let collection = db.collection("users")

// إدراج مستند
let document: Document = ["name": "أحمد", "email": "ahmed@example.com"]
let result = try collection.insertOne(document)
print("تم إدراج المستند بالمعرف: \(result?.insertedID ?? "غير معروف")")

// استعلام المستندات
let query: Document = [:]
let documents = try collection.find(query)
for doc in documents {
    print(doc)
}
```

المدونات

توصيات الكتب