Inicio rápido: Uso de Golang para consultar una base de datos de Azure SQL Database o Instancia administrada de Azure SQL
Se aplica a: Azure SQL Database Azure SQL Managed Instance
En este inicio rápido, usará el lenguaje de programación Golang para conectarse a una base de datos Azure SQL Database o a una base de datos en Azure SQL Managed Instance con el controlador go-mssqldb. En el ejemplo se consultan y modifican los datos con instrucciones Transact-SQL (T-SQL) explícitas. Golang es un lenguaje de programación de código abierto que facilita la compilación de software eficaz, confiable y simple.
Requisitos previos
Para completar este inicio rápido necesita instalar:
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Una base de datos Azure SQL Database o una base de datos en Azure SQL Managed Instance. Puede utilizar uno de estos inicios rápidos para crear una base de datos:
SQL Database Instancia administrada de SQL SQL Server en máquina virtual de Azure Creación Portal Portal Portal CLI CLI PowerShell PowerShell PowerShell Configuración Regla de firewall de IP en el nivel de servidor Conectividad desde una máquina virtual Conectividad desde un entorno local Conexión a una instancia de SQL Server Carga de datos AdventureWorks2022
cargado por inicio rápidoRestauración de WideWorldImporters Restauración de WideWorldImporters Restauración o importación de AdventureWorks2022
desde un archivo BACPAC desde GitHubRestauración o importación de AdventureWorks2022
desde un archivo BACPAC desde GitHubImportante
Los scripts de este artículo se escriben para utilizar la base de datos
AdventureWorks2022
. Con una instancia administrada de SQL, debe importar la base de datosAdventureWorks2022
en una base de datos de instancia, o bien modificar los scripts de este artículo para utilizar la base de datos Wide World Importers.Go y el software relacionado para el sistema operativo instalado.
La versión más reciente de sqlcmd para el sistema operativo instalado.
El módulo Az de Azure PowerShell para el sistema operativo instalado.
Obtención de información de conexión del servidor
Obtenga la información de conexión que necesita para conectarse a la base de datos. En los procedimientos siguientes, necesitará el nombre completo del servidor o nombre de host, el nombre de la base de datos y la información de inicio de sesión.
Inicie sesión en Azure Portal.
Vaya a las páginas Bases de datos SQL o Instancias administradas de SQL.
En la página Información general, revise el nombre completo del servidor junto a Nombre del servidor para una base de datos de Azure SQL Database o el nombre completo (o la dirección IP) del servidor junto a Host para una instancia administrada de Azure SQL o SQL Server en la máquina virtual de Azure. Para copiar el nombre del servidor o nombre de host, mantenga el cursor sobre él y seleccione el icono Copiar.
Nota:
Para obtener información de la conexión de SQL Server en una máquina virtual de Azure, consulte Conexión a una instancia de SQL Server.
Crear una carpeta nueva para el proyecto de Golang y sus dependencias
Desde el terminal, cree una carpeta de proyecto nueva llamada
SqlServerSample
.mkdir SqlServerSample
Creación de datos de ejemplo
En un editor de texto, cree un archivo
CreateTestData.sql
en la carpetaSqlServerSample
. En el archivo, pegue este código T-SQL, que crea un esquema, una tabla e inserta algunas filas.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
En el símbolo del sistema, vaya a
SqlServerSample
y usesqlcmd
para conectarse a la base de datos y ejecutar el script de Azure SQL recién creado. Reemplace los valores de servidor y base de datos correspondientes.az login sqlcmd -S <your_server>.database.windows.net -G -d <your_database> -i ./CreateTestData.sql
Inserción de código para consultar la base de datos
Cree un archivo denominado
sample.go
en la carpetaSqlServerSample
.En el archivo, pegue este código. Agregue los valores de servidor y base de datos.. En este ejemplo se usan los métodos contextuales de Golang para asegurarse de que hay una conexión activa.
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() }
Obtención de dependencias del proyecto de Golang y ejecución del código
En el símbolo del sistema, vaya a
SqlServerSample
e instale el controlador de SQL Server para Go ejecutando los comandos siguientes.go mod init SqlServerSample go mod tidy
En el símbolo del sistema, ejecute el siguiente comando.
az login go run sample.go
Compruebe el resultado.
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.