مقدمة إلى sqlx: امتداد قوي لـ database/sql للغة Go
\n\nمكتبة sqlx هي امتداد شائع للحزمة القياسية database/sql في لغة Go. إنها لا تستبدل السائق القياسي، بل تُبنى فوقه، مضيفة وظائف ملائمة للعمل مع قواعد البيانات. إذا كنت قد كتبت بلغة Go من قبل وواجهت الحاجة إلى مسح صفوف نتائج الاستعلام يدويًا إلى هياكل، فستجد أن sqlx هي خلاص حقيقي.
الهدف الرئيسي لـ sqlx هو تبسيط وتسريع التطوير، من خلال تخليص المطور من الكود النمطي. تتيح المكتبة ما يلي:
\n- \n
- تعيين نتائج استعلامات SQL تلقائيًا إلى هياكل Go. \n
- العمل مع المعلمات المسماة في الاستعلامات. \n
- تنفيذ إدراج جماعي للبيانات (batch insert). \n
- استخدام طرق ملائمة للعمل مع العبارات المحضرة (prepared statements). \n
- التكامل مع أي سائق متوافق مع
database/sql(PostgreSQL، MySQL، SQLite، وغيرها). \n
في موقع PythonLib.ru، نتحدث غالبًا عن الأدوات المفيدة للمطورين. اليوم سنقوم بتحليل مفصل لـ sqlx - وهي مكتبة يجب على كل مطور Go يعمل مع قواعد البيانات دراستها.
\n\nتثبيت sqlx
\n\nيتم تثبيت sqlx في مشروع Go بالطريقة القياسية عبر مدير الحزم go get:
go get github.com/jmoiron/sqlx\n\nستحتاج أيضًا إلى تثبيت سائق لقاعدة البيانات المحددة. على سبيل المثال، لـ PostgreSQL:
\n\ngo get github.com/lib/pq\n\nلـ MySQL:
\n\ngo get github.com/go-sql-driver/mysql\n\nلـ SQLite:
\n\ngo get github.com/mattn/go-sqlite3\n\nبعد التثبيت، يمكنك استيراد المكتبة إلى الكود الخاص بك:
\n\nimport (\n "github.com/jmoiron/sqlx"\n _ "github.com/lib/pq" // سائق PostgreSQL\n)\n\nبداية سريعة: المثال الأول مع sqlx
\n\nلنكتب برنامجًا بسيطًا يتصل بقاعدة بيانات PostgreSQL، وينشئ جدولًا، ويدرج عدة سجلات، ويعرضها على الشاشة.
\n\npackage 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 لتنفيذ الاستعلامات دون معالجة الأخطاء (مناسب للنمذجة الأولية).
الطرق والوظائف الرئيسية لـ sqlx
\n\nدعنا نستعرض 10 طرق رئيسية لمكتبة sqlx مع شرح مفصل وأمثلة.
\n\n1. sqlx.Connect
\nما يفعله: ينشئ اتصالاً بقاعدة البيانات ويتحقق منه (ينفذ ping). هذه هي الطريقة الأكثر ملاءمة للاتصال.
\nالمعلمات:
\n- \n
driverName(string) — اسم السائق (على سبيل المثال، "postgre