0Pricing
Go Academy · درس

‏sqlx: فحص البُنى والاستعلامات المسمّاة

‏Get وSelect وNamedExec باستخدام sqlx

‏sqlx: فحص البُنى والاستعلامات المسمّاة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما هو sqlx؟

توسّع github.com/jmoiron/sqlx وظائف database/sql بفحص البنى والاستعلامات المسمّاة وربط القيم داخل الاستعلام. وهي متوافقة مع واجهة API الخاصة بـ database/sql.

sqlx.Open

افتحوا اتصال قاعدة بيانات باستخدام sqlx بدلًا من sql:

db, err := sqlx.Open("postgres", dsn)
if err != nil { log.Fatal(err) }

Get وSelect

يفحص db.Get صفًا واحدًا في بنية، بينما يفحص db.Select صفوفًا متعددة في شريحة:

var user User
db.GetContext(ctx, &user, "SELECT * FROM users WHERE id=$1", id)

var users []User
db.SelectContext(ctx, &users, "SELECT * FROM users WHERE active=$1", true)

وسوم البنى

يربط sqlx الأعمدة بحقول البنية باستخدام وسم db:

type User struct {
    ID    int    `db:"id"`
    Name  string `db:"name"`
    Email string `db:"email"`
}

الاستعلامات المسمّاة

استخدموا المعلمات المسمّاة بصيغة :name ومرّروا بنية أو خريطة:

query := "INSERT INTO users (name, email) VALUES (:name, :email)"
_, err := db.NamedExecContext(ctx, query, user)

sqlx.In

يوسّع sqlx.In شريحة إلى جملة SQL من نوع IN:

ids := []int{1, 2, 3}
query, args, _ := sqlx.In("SELECT * FROM users WHERE id IN (?)", ids)
query = db.Rebind(query)
db.SelectContext(ctx, &users, query, args...)

Rebind

يحوّل db.Rebind(query) العناصر النائبة ? (التي يستخدمها sqlx.In) إلى الصيغة الخاصة ببرنامج التشغيل ($1 و$2 في PostgreSQL):

StructScan

افحصوا صفًا فرديًا في بنية باستخدام rows.StructScan:

rows, _ := db.QueryxContext(ctx, "SELECT * FROM users")
for rows.Next() {
    var u User
    rows.StructScan(&u)
}

MustExec

ينفّذ db.MustExec استعلامًا ويطلق panic عند حدوث خطأ — وهو مفيد لترحيلات المخطط أو إعداد الاختبارات عندما تكون الأخطاء قاتلة دائمًا.

db.MustExec(schema)

Unsafe

يُرجع db.Unsafe() إصدارًا يتجاهل بصمت الأعمدة غير المرتبطة بدلًا من إرجاع خطأ — وهو مفيد عندما يُرجع SELECT أعمدة أكثر مما تحتويه البنية من حقول.

sqlx مقابل ORM

يمنحكم sqlx تحكمًا كاملًا في SQL مع ربط البنى بأسلوب Go. أما ORM مثل GORM فيخفي SQL، لكنه قد ينشئ استعلامات غير متوقعة. استخدموا sqlx عندما تريدون SQL صريحًا مع فحص مريح.

اختبار سريع

ماذا يفعل db.SelectContext في sqlx؟

مراجعة: sqlx

النقاط الأساسية:

  • يفحص Get/Select البيانات مباشرة في البنى باستخدام وسوم db
  • الاستعلامات المسمّاة بصيغة :name وNamedExecContext
  • ‏sqlx.In + Rebind لجملة IN التي تستخدم الشرائح
  • ‏StructScan لفحص كل صف في بنية ضمن الحلقات

الأسئلة الشائعة

هل درس «‏sqlx: فحص البُنى والاستعلامات المسمّاة» مجاني؟

نعم — نص درس «‏sqlx: فحص البُنى والاستعلامات المسمّاة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏sqlx: فحص البُنى والاستعلامات المسمّاة»؟

‏Get وSelect وNamedExec باستخدام sqlx تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «‏sqlx: فحص البُنى والاستعلامات المسمّاة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏database/sql وبرامج التشغيل
  2. ‏sqlx: فحص البُنى والاستعلامات المسمّاة
  3. ‏pgx: برنامج تشغيل PostgreSQL عالي الأداء
  4. المعاملات والترحيلات
← العودة إلى Go Academy