sqlx للغة Go: دليل شامل مع أمثلة

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

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

ابدأ الدورة

مقدمة إلى sqlx: امتداد قوي لـ database/sql للغة Go

\n\n

مكتبة sqlx هي امتداد شائع للحزمة القياسية database/sql في لغة Go. إنها لا تستبدل السائق القياسي، بل تُبنى فوقه، مضيفة وظائف ملائمة للعمل مع قواعد البيانات. إذا كنت قد كتبت بلغة Go من قبل وواجهت الحاجة إلى مسح صفوف نتائج الاستعلام يدويًا إلى هياكل، فستجد أن sqlx هي خلاص حقيقي.

\n\n

الهدف الرئيسي لـ sqlx هو تبسيط وتسريع التطوير، من خلال تخليص المطور من الكود النمطي. تتيح المكتبة ما يلي:

\n
    \n
  • تعيين نتائج استعلامات SQL تلقائيًا إلى هياكل Go.
  • \n
  • العمل مع المعلمات المسماة في الاستعلامات.
  • \n
  • تنفيذ إدراج جماعي للبيانات (batch insert).
  • \n
  • استخدام طرق ملائمة للعمل مع العبارات المحضرة (prepared statements).
  • \n
  • التكامل مع أي سائق متوافق مع database/sql (PostgreSQL، MySQL، SQLite، وغيرها).
  • \n
\n\n

في موقع PythonLib.ru، نتحدث غالبًا عن الأدوات المفيدة للمطورين. اليوم سنقوم بتحليل مفصل لـ sqlx - وهي مكتبة يجب على كل مطور Go يعمل مع قواعد البيانات دراستها.

\n\n

تثبيت sqlx

\n\n

يتم تثبيت sqlx في مشروع Go بالطريقة القياسية عبر مدير الحزم go get:

\n\n
go get github.com/jmoiron/sqlx
\n\n

ستحتاج أيضًا إلى تثبيت سائق لقاعدة البيانات المحددة. على سبيل المثال، لـ PostgreSQL:

\n\n
go get github.com/lib/pq
\n\n

لـ MySQL:

\n\n
go get github.com/go-sql-driver/mysql
\n\n

لـ SQLite:

\n\n
go get github.com/mattn/go-sqlite3
\n\n

بعد التثبيت، يمكنك استيراد المكتبة إلى الكود الخاص بك:

\n\n
import (\n    "github.com/jmoiron/sqlx"\n    _ "github.com/lib/pq" // سائق PostgreSQL\n)
\n\n

بداية سريعة: المثال الأول مع sqlx

\n\n

لنكتب برنامجًا بسيطًا يتصل بقاعدة بيانات PostgreSQL، وينشئ جدولًا، ويدرج عدة سجلات، ويعرضها على الشاشة.

\n\n
package main\n\nimport (\n    "fmt"\n    "log"\n    "github.com/jmoiron/sqlx"\n    _ "github.com/lib/pq"\n)\n\ntype User struct {\n    ID   int    `db:"id"`\n    Name string `db:"name"`\n    Age  int    `db:"age"`\n}\n\nfunc main() {\n    // الاتصال بقاعدة البيانات\n    db, err := sqlx.Connect("postgres", "user=postgres dbname=testdb sslmode=disable")\n    if err != nil {\n        log.Fatalln(err)\n    }\n    defer db.Close()\n\n    // إنشاء الجدول\n    schema := `CREATE TABLE IF NOT EXISTS users (\n        id SERIAL PRIMARY KEY,\n        name VARCHAR(100) NOT NULL,\n        age INTEGER NOT NULL\n    );`\n    db.MustExec(schema)\n\n    // إدراج البيانات\n    db.MustExec("INSERT INTO users (name, age) VALUES ($1, $2)", "Alice", 30)\n    db.MustExec("INSERT INTO users (name, age) VALUES ($1, $2)", "Bob", 25)\n\n    // استعلام البيانات\n    var users []User\n    err = db.Select(&users, "SELECT id, name, age FROM users")\n    if err != nil {\n        log.Fatalln(err)\n    }\n\n    fmt.Printf("Users: %+v\\n", users)\n}
\n\n

في هذا المثال، نرى الإمكانيات الرئيسية لـ sqlx: التعيين التلقائي لحقول الهيكل (بفضل العلامات db)، وطريقة Select لاستعلام عدة صفوف، و MustExec لتنفيذ الاستعلامات دون معالجة الأخطاء (مناسب للنمذجة الأولية).

\n\n

الطرق والوظائف الرئيسية لـ sqlx

\n\n

دعنا نستعرض 10 طرق رئيسية لمكتبة sqlx مع شرح مفصل وأمثلة.

\n\n

1. sqlx.Connect

\n

ما يفعله: ينشئ اتصالاً بقاعدة البيانات ويتحقق منه (ينفذ ping). هذه هي الطريقة الأكثر ملاءمة للاتصال.

\n

المعلمات:

\n
    \n
  • driverName (string) — اسم السائق (على سبيل المثال، "postgre

توصيات