Краткое руководство. Использование языка Go для подключения и запроса данных в База данных Azure для MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Важно!

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

В этом кратком руководстве объясняется, как подключиться к базе данных Azure для MySQL с помощью кода Go на платформе Windows, Ubuntu Linux или Apple macOS. Здесь также показано, как использовать инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных. В этой статье предполагается, что у вас уже есть опыт разработки на языке Go и вы только начали работу с базой данных Azure для MySQL.

Необходимые компоненты

В качестве отправной точки в этом кратком руководстве используются ресурсы, созданные в соответствии со следующими материалами:

Важно!

Убедитесь, что IP-адрес, с которого вы подключаетесь, добавлен в правила брандмауэра на сервере через портал Azure или Azure CLI.

Установка Go и соединителя MySQL

Установите Go и драйвер go-sql-driver для 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 для 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.для MySQL. Вам потребуется полное имя сервера и учетные данные для входа.

  1. Войдите на портал Azure.
  2. В меню слева на портале Azure щелкните Все ресурсы и выполните поиск по имени созданного сервера (например, mydemoserver).
  3. Щелкните имя сервера.
  4. Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели. Azure Database for MySQL server name

Сборка и выполнение кода Go

  1. Для написания кода на Golang можно использовать простой текстовый редактор, например Блокнот в Microsoft Windows, vi или Nano в Ubuntu, а также TextEdit в macOS. Если вы предпочитаете использовать полнофункциональную интегрированную среду разработки, попробуйте Gogland от JetBrains, Visual Studio Code от корпорации Майкрософт или Atom.
  2. Вставьте код Go из раздела ниже в текстовые файлы с расширением *.go и сохраните их в папке проекта, например %USERPROFILE%\go\src\mysqlgo\createtable.go в Windows или ~/go/src/mysqlgo/createtable.go в Linux.
  3. Найдите константы HOST, DATABASE, USER и PASSWORD в коде и замените приведенные для примера значения своими собственными.
  4. Запустите командную строку или оболочку Bash. Перейдите в папку проекта. В Windows это будет команда cd %USERPROFILE%\go\src\mysqlgo\, а в Linux — cd ~/go/src/mysqlgo/. Некоторые из упомянутых редакторов IDE позволяют выполнять отладку и использовать среду выполнения без применения команд оболочки.
  5. Выполните код с помощью команды go run createtable.go, чтобы скомпилировать и запустить приложение.
  6. Вы также можете создать код в собственном приложении. Для этого введите go build createtable.go, а затем выполните createtable.exe, чтобы запустить приложение.

Подключение, создание таблицы и вставка данных

Используйте следующий код для подключения к серверу, создания таблицы и загрузки данных с помощью инструкции SQL INSERT.

Код импортирует три пакета: пакет sql, драйвер go sql для MySQL для обмена данными с базой данных Azure для MySQL, а также пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open(), чтобы подключиться к базе данных Azure для 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, драйвер go sql для MySQL для обмена данными с базой данных Azure для MySQL, а также пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open(), чтобы подключиться к базе данных Azure для 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, драйвер go sql для MySQL для обмена данными с базой данных Azure для MySQL, а также пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open(), чтобы подключиться к базе данных Azure для MySQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Код вызывает метод Exec() для выполнения команды UPDATE. При каждом запуске пользовательский метод 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, драйвер go sql для MySQL для обмена данными с базой данных Azure для MySQL, а также пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open(), чтобы подключиться к базе данных Azure для MySQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Код вызывает метод Exec() для выполнения команды DELETE. При каждом запуске пользовательский метод 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

Следующие шаги