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

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

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

ابدأ الدورة

مقدمة: لماذا Go وقواعد البيانات ثنائي مثالي

Go (Golang) هي لغة مُجمَّعة، ومُكتوبة بشكل ثابت، صُممت للأداء العالي وسهولة التطوير. واحدة من المزايا الرئيسية لـ Go هي مكتبتها القياسية الغنية ونظام برامج التشغيل (drivers) للعمل مع قواعد البيانات. في هذه المقالة، سنشرح كيفية الاتصال وتنفيذ العمليات مع اثنين من أشهر أنظمة إدارة قواعد البيانات (DBMS): PostgreSQL العلائقية و MongoDB الموجهة للوثائق.

سننظر في تثبيت برامج التشغيل، وكتابة عمليات CRUD (إنشاء، قراءة، تحديث، حذف)، وأفضل الممارسات لكل نوع من قواعد البيانات في سياق تطبيقات Go.



1. العمل مع PostgreSQL في Go

PostgreSQL هو نظام إدارة قواعد بيانات علائقية-كائنية (ORDBMS) قوي ومفتوح المصدر. للعمل معه في Go، هناك العديد من برامج التشغيل، لكن الأكثر شيوعًا هي lib/pq و pgx. pgx هو الأحدث والأكثر أداءً، لذلك سنستخدمه.



1.1. تثبيت برنامج التشغيل (Driver)

قم بتثبيت الحزمة pgx عبر go get:

go get github.com/jackc/pgx/v5


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

لنقم بإنشاء ملف main.go وإنشاء اتصال بـ PostgreSQL. لاحظ استخدام السياق (context.Background()) - هذا هو النمط القياسي في Go لإدارة دورة حياة الاستعلامات.

package main

import ( "context" "fmt" "log"

"github.com/jackc/pgx/v5/pgxpool")

func main() { // سلسلة الاتصال: postgres://username:password@host:port/dbname connString := "postgres://user:password@localhost:5432/mydb" // إنشاء مجموعة اتصالات (موصى بها للإنتاج) pool, err := pgxpool.New(context.Background(), connString) if err != nil { log.Fatal("فشل إنشاء مجموعة الاتصالات:", err) } defer pool.Close() // التحقق من الاتصال err = pool.Ping(context.Background()) if err != nil { log.Fatal("فشل الاتصال بقاعدة البيانات:", err) } fmt.Println("تم الاتصال بنجاح بـ PostgreSQL!")}


1.3. تنفيذ استعلامات SQL (CRUD)

سننظر في العمليات الأساسية باستخدام مثال جدول users.



إنشاء الجدول (CREATE)

// تنفيذ استعلام DDL_, err = pool.Exec(context.Background(), `    CREATE TABLE IF NOT EXISTS users (        id SERIAL PRIMARY KEY,        name VARCHAR(100) NOT NULL,        email VARCHAR(100) UNIQUE NOT NULL,        age INT    )`)if err != nil {    log.Fatal("خطأ في إنشاء الجدول:", err)}


إدراج البيانات (INSERT)

// إدراج مع إرجاع المعرفvar userID interr = pool.QueryRow(context.Background(),    "INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id",    "أليكسي", "alex@example.com", 30).Scan(&userID)if err != nil {    log.Fatal("خطأ في الإدراج:", err)}fmt.Printf("تمت إضافة مستخدم بالمعرف: %d", userID)


قراءة البيانات (SELECT)

// الحصول على مستخدم واحدtype User struct {    ID    int    Name  string    Email string    Age   int}

var user Usererr = pool.QueryRow(context.Background(), "SELECT id, name, email, age FROM users WHERE id = $1", 1). Scan(&user.ID, &user.Name, &user.Email, &user.Age)if err != nil { log.Fatal("المستخدم غير موجود:", err)}fmt.Printf("تم العثور على: %+v", user)


التحديث والحذف (UPDATE/DELETE)

// تحديث_, err = pool.Exec(context.Background(),    "UPDATE users SET age = $1 WHERE id = $2", 31, 1)

// حذف_, err = pool.Exec(context.Background(), "DELETE FROM users WHERE id = $1", 1)


2. العمل مع MongoDB في Go

MongoDB هي قاعدة بيانات NoSQL رائدة، تخز

المدونات

توصيات الكتب