Каткое руководство. Использование Golang для отправки запросов к базе данных в службе "База данных SQL Azure" или Управляемому экземпляру SQL Azure
Применимо к: База данных SQL Azure Управляемый экземпляр SQL Azure
В этом кратком руководстве вы будете использовать язык программирования Golang для подключения к базе данных SQL Azure или базы данных в Управляемый экземпляр SQL Azure с драйвером go-mssqldb. Примеры запросов и изменения данных с помощью явных инструкций Transact-SQL (T-SQL). Golang — это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения.
Необходимые компоненты
Для работы с этим кратким руководством вам понадобится:
Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
База данных SQL Azure или база данных в Управляемый экземпляр SQL Azure. Для создания базы данных можно использовать одно из следующих кратких руководств:
База данных SQL Управляемый экземпляр SQL SQL Server на виртуальной машине Azure Создание Портал Портал Портал CLI CLI PowerShell PowerShell PowerShell Настройка Правило брандмауэра для IP-адресов на уровне сервера Подключение из виртуальной машины Подключение из локальной сети Подключение к экземпляру SQL Server Загрузка данных AdventureWorks2022
загружено на краткое руководствоВосстановление WideWorldImporters Восстановление WideWorldImporters Восстановление или импорт AdventureWorks2022
из BACPAC-файла из GitHubВосстановление или импорт AdventureWorks2022
из BACPAC-файла из GitHubВнимание
Скрипты, приведенные в этой статье, записываются для использования
AdventureWorks2022
базы данных. С управляемым экземпляром SQL необходимо импортироватьAdventureWorks2022
базу данных в базу данных экземпляра или изменить скрипты в этой статье, чтобы использовать базу данных Wide World Imports.Перейдите и связанное программное обеспечение для установленной операционной системы.
Последняя версия sqlcmd для установленной операционной системы.
Модуль Azure PowerShell Az для установленной операционной системы.
Получение сведений о подключении к серверу
Получите сведения, необходимые для подключения к базе данных. Для дальнейших действий вам понадобится полное имя сервера или имя узла, имя базы данных и данные для входа.
Войдите на портал Azure.
Перейдите на страницу Базы данных SQL или Управляемые экземпляры SQL.
На странице Обзор просмотрите полное имя сервера рядом с полем Имя сервера для базы данных в службе "База данных SQL Azure" или полное имя сервера (либо IP-адрес) рядом с полем Узел для Управляемого экземпляра SQL Azure или сервера SQL Server на виртуальной машине Azure. Чтобы скопировать имя сервера или имя узла, наведите на него указатель мыши и щелкните значок копирования.
Примечание.
Сведения о подключении SQL Server на виртуальной машине Azure см. в этом разделе.
Создание новой папки для проекта Golang и зависимостей
В терминале создайте новую папку
SqlServerSample
проекта.mkdir SqlServerSample
Создание примера набора данных
В текстовом редакторе создайте файл, который вызывается
CreateTestData.sql
в папкеSqlServerSample
. Вставьте следующий код T-SQL, который создает схему и таблицу, а также вставляет несколько строк, в файл.CREATE SCHEMA TestSchema; GO CREATE TABLE TestSchema.Employees ( Id INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50) ); GO INSERT INTO TestSchema.Employees (Name, Location) VALUES (N'Jared', N'Australia'), (N'Nikita', N'India'), (N'Astrid', N'Germany'); GO SELECT * FROM TestSchema.Employees; GO
В командной строке перейдите
SqlServerSample
к базе данных и используйтеsqlcmd
его для подключения к базе данных и запустите созданный скрипт SQL Azure. Замените соответствующие значения для сервера и базы данных.az login sqlcmd -S <your_server>.database.windows.net -G -d <your_database> -i ./CreateTestData.sql
Вставка кода для создания запроса к базе данных
Создайте файл с именем
sample.go
в папкеSqlServerSample
.Вставьте в файл этот код. Добавьте значения для сервера и базы данных. В этом примере используются контекстные методы Golang, чтобы убедиться в наличии активного подключения.
package main import ( "github.com/microsoft/go-mssqldb/azuread" "database/sql" "context" "log" "fmt" "errors" ) var db *sql.DB var server = "<your_server.database.windows.net>" var port = 1433 var database = "<your_database>" func main() { // Build connection string connString := fmt.Sprintf("server=%s;port=%d;database=%s;fedauth=ActiveDirectoryDefault;", server, port, database) var err error // Create connection pool db, err = sql.Open(azuread.DriverName, connString) if err != nil { log.Fatal("Error creating connection pool: ", err.Error()) } ctx := context.Background() err = db.PingContext(ctx) if err != nil { log.Fatal(err.Error()) } fmt.Printf("Connected!\n") // Create employee createID, err := CreateEmployee("Jake", "United States") if err != nil { log.Fatal("Error creating Employee: ", err.Error()) } fmt.Printf("Inserted ID: %d successfully.\n", createID) // Read employees count, err := ReadEmployees() if err != nil { log.Fatal("Error reading Employees: ", err.Error()) } fmt.Printf("Read %d row(s) successfully.\n", count) // Update from database updatedRows, err := UpdateEmployee("Jake", "Poland") if err != nil { log.Fatal("Error updating Employee: ", err.Error()) } fmt.Printf("Updated %d row(s) successfully.\n", updatedRows) // Delete from database deletedRows, err := DeleteEmployee("Jake") if err != nil { log.Fatal("Error deleting Employee: ", err.Error()) } fmt.Printf("Deleted %d row(s) successfully.\n", deletedRows) } // CreateEmployee inserts an employee record func CreateEmployee(name string, location string) (int64, error) { ctx := context.Background() var err error if db == nil { err = errors.New("CreateEmployee: db is null") return -1, err } // Check if database is alive. err = db.PingContext(ctx) if err != nil { return -1, err } tsql := ` INSERT INTO TestSchema.Employees (Name, Location) VALUES (@Name, @Location); select isNull(SCOPE_IDENTITY(), -1); ` stmt, err := db.Prepare(tsql) if err != nil { return -1, err } defer stmt.Close() row := stmt.QueryRowContext( ctx, sql.Named("Name", name), sql.Named("Location", location)) var newID int64 err = row.Scan(&newID) if err != nil { return -1, err } return newID, nil } // ReadEmployees reads all employee records func ReadEmployees() (int, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("SELECT Id, Name, Location FROM TestSchema.Employees;") // Execute query rows, err := db.QueryContext(ctx, tsql) if err != nil { return -1, err } defer rows.Close() var count int // Iterate through the result set. for rows.Next() { var name, location string var id int // Get values from row. err := rows.Scan(&id, &name, &location) if err != nil { return -1, err } fmt.Printf("ID: %d, Name: %s, Location: %s\n", id, name, location) count++ } return count, nil } // UpdateEmployee updates an employee's information func UpdateEmployee(name string, location string) (int64, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("UPDATE TestSchema.Employees SET Location = @Location WHERE Name = @Name") // Execute non-query with named parameters result, err := db.ExecContext( ctx, tsql, sql.Named("Location", location), sql.Named("Name", name)) if err != nil { return -1, err } return result.RowsAffected() } // DeleteEmployee deletes an employee from the database func DeleteEmployee(name string) (int64, error) { ctx := context.Background() // Check if database is alive. err := db.PingContext(ctx) if err != nil { return -1, err } tsql := fmt.Sprintf("DELETE FROM TestSchema.Employees WHERE Name = @Name;") // Execute non-query with named parameters result, err := db.ExecContext(ctx, tsql, sql.Named("Name", name)) if err != nil { return -1, err } return result.RowsAffected() }
Получение зависимостей проекта Golang и запуск кода
В командной строке перейдите к
SqlServerSample
драйверу SQL Server для Go и установите его, выполнив следующие команды.go mod init SqlServerSample go mod tidy
В командной строке выполните следующую команду:
az login go run sample.go
Проверьте выходные данные.
Connected! Inserted ID: 4 successfully. ID: 1, Name: Jared, Location: Australia ID: 2, Name: Nikita, Location: India ID: 3, Name: Astrid, Location: Germany ID: 4, Name: Jake, Location: United States Read 4 row(s) successfully. Updated 1 row(s) successfully. Deleted 1 row(s) successfully.