البدء السريع: استخدم لغة Go للاتصال والاستعلام عن البيانات في Azure Database for MySQL

ينطبق على: قاعدة بيانات Azure ل MySQL - خادم واحد

هام

قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟

يوضح هذا البداية السريعة كيفية الاتصال بـ Azure Database for MySQL من أنظمة Windows وUbuntu Linux وApple macOS الأساسية باستخدام رمز مكتوب بلغة Go. توضح طريقة استخدام عبارات SQL الاستعلام عن البيانات وإدراجها وتحديثها وحذفها في قاعدة البيانات. يفترض هذا الموضوع أنك على دراية بالتطوير باستخدام Go وأنك جديد في التعامل مع Azure Database for MySQL.

المتطلبات الأساسية

يستخدم هذا البدء السريع الموارد التي تم إنشاؤها في أي من هذه الأدلة كنقطة بداية:

هام

تأكد من أن عنوان IP الذي تتصل منه قد تمت إضافته لقواعد جدار الحماية للخادم باستخدام مدخل Microsoft Azure أو Azure CLI

قم بتثبيت موصل Go وMySQL

قم بتثبيت Go وgo-sql-driver for MySQL على جهاز الكمبيوتر الخاص بك. اعتمادًا على النظام الأساسي الخاص بك، اتبع الخطوات الموجودة في القسم المناسب:

  1. قم بتنزيل وتثبيت Go لـ Microsoft Windows وفقًا لإرشادات التثبيت.

  2. قم بتشغيل موجه الأوامر من قائمة البدء.

  3. قم بعمل مجلد لمشروعك مثل. mkdir %USERPROFILE%\go\src\mysqlgo.

  4. قم بتغيير الدليل إلى مجلد المشروع، مثل cd %USERPROFILE%\go\src\mysqlgo.

  5. قم بتعيين متغير البيئة لـ GOPATH للإشارة إلى دليل التعليمة البرمجية المصدر. set GOPATH=%USERPROFILE%\go.

  6. قم بتثبيت go-sql-driver for mysql عن طريق تشغيل الأمر go get github.com/go-sql-driver/mysql.

    باختصار، قم بتثبيت Go، ثم قم بتشغيل هذه الأوامر في موجه الأوامر:

    mkdir  %USERPROFILE%\go\src\mysqlgo
    cd %USERPROFILE%\go\src\mysqlgo
    set GOPATH=%USERPROFILE%\go
    go get github.com/go-sql-driver/mysql
    

الحصول على معلومات الاتصال

احصل على معلومات الاتصال المطلوبة للاتصال بـAzure Database for MySQL. أنت بحاجة إلى اسم الخادم المؤهل بالكامل وبيانات اعتماد تسجيل الدخول.

  1. سجّل الدخول إلى مدخل Azure.
  2. من القائمة اليمنى في مدخل Azure، انقر فوق جميع الموارد،ثم ابحث عن الخادم الذي أنشأته (مثل mydemoserver).
  3. انقر فوق اسم الخادم.
  4. من لوحة نظرة عامة على الخادم، دوّن ملاحظة عن اسم الخادم واسم تسجيل دخول مسؤول الخادم. إذا نسيت كلمة المرور، يمكنك أيضًا إعادة تعيين كلمة المرور من هذه اللوحة.

بناء وتشغيل كود Go

  1. لكتابة التعليمة البرمجية لـ Golang، يمكنك استخدام محرر نصوص بسيط، مثل Notepad في Microsoft Windows أو vi أو Nano في Ubuntu أو TextEdit في macOS. إذا كنت تفضل بيئة تطوير تفاعلية أكثر ثراءً، فجرّب Gogland بواسطة Jetbrains أو Visual Studio Code من Microsoft أوAtom.
  2. الصق كود Go من الأقسام أدناه في ملفات نصية، ثم احفظها في مجلد المشروع بامتداد الملف .go (مثل مسار Windows %USERPROFILE%\go\src\mysqlgo\createtable.go أو مسار Linux ~/go/src/mysqlgo/createtable.go).
  3. حدد موقع الثوابت HOST وDATABASE وUSER وPASSWORD في التعليمة البرمجية، ثم استبدل نماذج القيم بقيمك الخاصة.
  4. قم بتشغيل موجه الأوامر أو Bash shell. قم بتغيير الدليل إلى مجلد المشروع الخاص بك. على سبيل المثال، في Windows cd %USERPROFILE%\go\src\mysqlgo\. على Linux cd ~/go/src/mysqlgo/. تقدم بعض محررات IDE المذكورة إمكانيات التصحيح ووقت التشغيل دون الحاجة إلى أوامر shell.
  5. قم بتشغيل الكود عن طريق كتابة الأمر go run createtable.go لترجمة التطبيق وتشغيله.
  6. بدلاً من ذلك، لإنشاء التعليمات البرمجية في تطبيق أصلي، go build createtable.go، قم بتشغيل createtable.exe لتشغيل التطبيق.

الاتصال وإنشاء الجدول وإدخال البيانات

استخدم التعليمات البرمجية التالية للاتصال بالخادم وإنشاء جدول وتحميل البيانات باستخدام عبارة SQL INSERT.

تستورد الشفرة ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بـ Azure Database for MySQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

التعليمة البرمجية تستدعي الأسلوب sql.Open() للاتصال بـ Azure Database for MySQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. التعليمة البرمجية تستدعي طريقة Exec() عدة مرات لتشغيل عدة أوامر DDL. التعليمة البرمجية تستخدم أيضًا Prepare() وExec() لتشغيل عبارات معدة بمعلمات مختلفة لإدراج ثلاثة صفوف. في كل مرة، يتم استخدام طريقة checkError() مخصصة للتحقق من حدوث خطأ والذعر للخروج.

استبدل الثوابت host ,database ,user وpassword بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

const (
	host     = "mydemoserver.mysql.database.azure.com"
	database = "quickstartdb"
	user     = "myadmin@mydemoserver"
	password = "yourpassword"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

	// Initialize connection object.
	db, err := sql.Open("mysql", connectionString)
	checkError(err)
	defer db.Close()

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database.")

	// Drop previous table of same name if one exists.
	_, err = db.Exec("DROP TABLE IF EXISTS inventory;")
	checkError(err)
	fmt.Println("Finished dropping table (if existed).")

	// Create table.
	_, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
	checkError(err)
	fmt.Println("Finished creating table.")

	// Insert some data into table.
	sqlStatement, err := db.Prepare("INSERT INTO inventory (name, quantity) VALUES (?, ?);")
	res, err := sqlStatement.Exec("banana", 150)
	checkError(err)
	rowCount, err := res.RowsAffected()
	fmt.Printf("Inserted %d row(s) of data.\n", rowCount)

	res, err = sqlStatement.Exec("orange", 154)
	checkError(err)
	rowCount, err = res.RowsAffected()
	fmt.Printf("Inserted %d row(s) of data.\n", rowCount)

	res, err = sqlStatement.Exec("apple", 100)
	checkError(err)
	rowCount, err = res.RowsAffected()
	fmt.Printf("Inserted %d row(s) of data.\n", rowCount)
	fmt.Println("Done.")
}

اقرأ البيانات

استخدم التعليمات البرمجية التالية للاتصال وقراءة البيانات باستخدام عبارة الـ SQL: SELECT.

تستورد الشفرة ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بـ Azure Database for MySQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

يستدعي الرمز الأسلوب sql.Open() للاتصال بـ Azure Database for MySQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يستدعي الرمز طريقة Query() لتشغيل الأمر select. ثم يتم تشغيل Next() للتكرار خلال مجموعة النتائج و Scan() لتحليل قيم العمود، وحفظ القيمة في متغيرات. في كل مرة يتم استخدام طريقة checkError() مخصصة للتحقق من حدوث خطأ والذعر للخروج.

استبدل الثوابت host ,database ,user وpassword بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

const (
	host     = "mydemoserver.mysql.database.azure.com"
	database = "quickstartdb"
	user     = "myadmin@mydemoserver"
	password = "yourpassword"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

	// Initialize connection object.
	db, err := sql.Open("mysql", connectionString)
	checkError(err)
	defer db.Close()

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database.")

	// Variables for printing column data when scanned.
	var (
		id       int
		name     string
		quantity int
	)

	// Read some data from the table.
	rows, err := db.Query("SELECT id, name, quantity from inventory;")
	checkError(err)
	defer rows.Close()
	fmt.Println("Reading data:")
	for rows.Next() {
		err := rows.Scan(&id, &name, &quantity)
		checkError(err)
		fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
	}
	err = rows.Err()
	checkError(err)
	fmt.Println("Done.")
}

تحديث البيانات

استخدم التعليمات البرمجية التالية للاتصال وتحديث البيانات باستخدام عبارة SQL UPDATE.

تستورد الشفرة ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بـ Azure Database for MySQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

يستدعي الرمز الأسلوب sql.Open() للاتصال بـ Azure Database for MySQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يستدعي الرمز طريقة Exec() لتشغيل أمر التحديث. في كل مرة يتم استخدام طريقة checkError() مخصصة للتحقق من حدوث خطأ والذعر للخروج.

استبدل الثوابت host ,database ,user وpassword بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

const (
	host     = "mydemoserver.mysql.database.azure.com"
	database = "quickstartdb"
	user     = "myadmin@mydemoserver"
	password = "yourpassword"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

	// Initialize connection object.
	db, err := sql.Open("mysql", connectionString)
	checkError(err)
	defer db.Close()

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database.")

	// Modify some data in table.
	rows, err := db.Exec("UPDATE inventory SET quantity = ? WHERE name = ?", 200, "banana")
	checkError(err)
	rowCount, err := rows.RowsAffected()
	fmt.Printf("Updated %d row(s) of data.\n", rowCount)
	fmt.Println("Done.")
}

حذف البيانات

استخدم التعليمات البرمجية التالية للاتصال وإزالة البيانات باستخدام عبارة SQL DELETE.

تستورد الشفرة ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بـ Azure Database for MySQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

يستدعي الرمز الأسلوب sql.Open() للاتصال بـ Azure Database for MySQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يستدعي الرمز طريقة Exec() لتشغيل أمر الحذف. في كل مرة يتم استخدام طريقة checkError() مخصصة للتحقق من حدوث خطأ والذعر للخروج.

استبدل الثوابت host ,database ,user وpassword بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

const (
	host     = "mydemoserver.mysql.database.azure.com"
	database = "quickstartdb"
	user     = "myadmin@mydemoserver"
	password = "yourpassword"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

	// Initialize connection object.
	db, err := sql.Open("mysql", connectionString)
	checkError(err)
	defer db.Close()

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database.")

	// Modify some data in table.
	rows, err := db.Exec("DELETE FROM inventory WHERE name = ?", "orange")
	checkError(err)
	rowCount, err := rows.RowsAffected()
	fmt.Printf("Deleted %d row(s) of data.\n", rowCount)
	fmt.Println("Done.")
}

تنظيف الموارد

لتنظيف جميع الموارد المستخدمة في أثناء هذا التشغيل السريع حذف مجموعة الموارد باستخدام الأمر التالي:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

الخطوات التالية