Database di Azure per MySQL: usare il linguaggio Go per connettersi ai dati ed eseguire queryAzure Database for MySQL: Use Go language to connect and query data

Questa guida introduttiva illustra come connettersi a un database di Azure per MySQL dalle piattaforme Windows, Ubuntu Linux e Apple macOS usando codice scritto nel linguaggio Go.This quickstart demonstrates how to connect to an Azure Database for MySQL from Windows, Ubuntu Linux, and Apple macOS platforms by using code written in the Go language. Spiega come usare le istruzioni SQL per eseguire query, inserire, aggiornare ed eliminare dati nel database.It shows how to use SQL statements to query, insert, update, and delete data in the database. Questo argomento presuppone che si abbia familiarità con lo sviluppo con Go, ma non con Database di Azure per MySQL.This topic assumes that you are familiar with development using Go and that you are new to working with Azure Database for MySQL.

PrerequisitiPrerequisites

Questa guida introduttiva usa le risorse create in una delle guide seguenti come punto di partenza:This quickstart uses the resources created in either of these guides as a starting point:

Installare Go e il connettore MySQLInstall Go and MySQL connector

Installare Go e il driver go-sql per MySQL nel computer.Install Go and the go-sql-driver for MySQL on your own computer. A seconda della piattaforma, seguire le istruzioni nella sezione appropriata:Depending on your platform, follow the steps in the appropriate section:

WindowsWindows

  1. Scaricare e installare Go per Microsoft Windows seguendo le istruzioni di installazione.Download and install Go for Microsoft Windows according to the installation instructions.
  2. Avviare il prompt dei comandi dal menu Start.Launch the command prompt from the start menu.
  3. Creare una cartella per il progetto, ad esempioMake a folder for your project such. mkdir %USERPROFILE%\go\src\mysqlgo.mkdir %USERPROFILE%\go\src\mysqlgo.
  4. Passare alla cartella del progetto, ad esempio cd %USERPROFILE%\go\src\mysqlgo.Change directory into the project folder, such as cd %USERPROFILE%\go\src\mysqlgo.
  5. Impostare la variabile di ambiente per GOPATH in modo che punti alla directory del codice sorgente.Set the environment variable for GOPATH to point to the source code directory. set GOPATH=%USERPROFILE%\go.set GOPATH=%USERPROFILE%\go.
  6. Installare il driver go-sql per MySQL eseguendo il comando go get github.com/go-sql-driver/mysql.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    In sintesi, installare Go e quindi eseguire questi comandi nel prompt dei comandi:In summary, install Go, then run these commands in the command prompt:

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

Linux (Ubuntu)Linux (Ubuntu)

  1. Avviare la shell Bash.Launch the Bash shell.
  2. Installare Go eseguendo sudo apt-get install golang-go.Install Go by running sudo apt-get install golang-go.
  3. Creare una cartella per il progetto nella home directory, ad esempio mkdir -p ~/go/src/mysqlgo/.Make a folder for your project in your home directory, such as mkdir -p ~/go/src/mysqlgo/.
  4. Passare alla cartella, ad esempio cd ~/go/src/mysqlgo/.Change directory into the folder, such as cd ~/go/src/mysqlgo/.
  5. Impostare la variabile di ambiente GOPATH in modo che punti a una directory di origine valida, ad esempio la cartella go della home directory corrente.Set the GOPATH environment variable to point to a valid source directory, such as your current home directory's go folder. Nella shell Bash eseguire export GOPATH=~/go per aggiungere la directory go come GOPATH per la sessione shell corrente.At the Bash shell, run export GOPATH=~/go to add the go directory as the GOPATH for the current shell session.
  6. Installare il driver go-sql per MySQL eseguendo il comando go get github.com/go-sql-driver/mysql.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    In sintesi, eseguire questi comandi Bash:In summary, run these bash commands:

    sudo apt-get install golang-go
    mkdir -p ~/go/src/mysqlgo/
    cd ~/go/src/mysqlgo/
    export GOPATH=~/go/
    go get github.com/go-sql-driver/mysql
    

Apple macOSApple macOS

  1. Scaricare e installare Go seguendo le istruzioni di installazione per la piattaforma in uso.Download and install Go according to the installation instructions matching your platform.
  2. Avviare la shell Bash.Launch the Bash shell.
  3. Creare una cartella per il progetto nella home directory, ad esempio mkdir -p ~/go/src/mysqlgo/.Make a folder for your project in your home directory, such as mkdir -p ~/go/src/mysqlgo/.
  4. Passare alla cartella, ad esempio cd ~/go/src/mysqlgo/.Change directory into the folder, such as cd ~/go/src/mysqlgo/.
  5. Impostare la variabile di ambiente GOPATH in modo che punti a una directory di origine valida, ad esempio la cartella go della home directory corrente.Set the GOPATH environment variable to point to a valid source directory, such as your current home directory's go folder. Nella shell Bash eseguire export GOPATH=~/go per aggiungere la directory go come GOPATH per la sessione shell corrente.At the Bash shell, run export GOPATH=~/go to add the go directory as the GOPATH for the current shell session.
  6. Installare il driver go-sql per MySQL eseguendo il comando go get github.com/go-sql-driver/mysql.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    In sintesi, installare Go e quindi eseguire questi comandi Bash:In summary, install Go, then run these bash commands:

    mkdir -p ~/go/src/mysqlgo/
    cd ~/go/src/mysqlgo/
    export GOPATH=~/go/
    go get github.com/go-sql-driver/mysql
    

Ottenere informazioni di connessioneGet connection information

Ottenere le informazioni di connessione necessarie per connettersi al database di Azure per MySQL.Get the connection information needed to connect to the Azure Database for MySQL. Sono necessari il nome del server completo e le credenziali di accesso.You need the fully qualified server name and login credentials.

  1. Accedere al Portale di Azure.Log in to the Azure portal.
  2. Nel menu a sinistra nel portale di Azure fare clic su Tutte le risorse e cercare il server creato, ad esempio myserver4demo.From the left-hand menu in the Azure portal, click All resources and then search for the server you have creased (such as myserver4demo).
  3. Fare clic sul nome server myserver4demo.Click the server name myserver4demo.
  4. Selezionare la pagina Proprietà del server e prendere nota dei valori riportati in Nome server e Nome di accesso dell'amministratore server.Select the server's Properties page, and then make a note of the Server name and Server admin login name. Database di Azure per MySQL - Accesso dell'amministratore del serverAzure Database for MySQL - Server Admin Login
  5. Se si dimenticano le informazioni di accesso per il server, passare alla pagina Panoramica per visualizzare il nome di accesso dell'amministratore del server e, se necessario, reimpostare la password.If you forget your server login information, navigate to the Overview page to view the Server admin login name, and if necessary reset the password.

Compilare ed eseguire il codice GoBuild and run Go code

  1. Per scrivere codice Golang si può usare un editor di testo semplice, ad esempio Blocco note di Microsoft Windows, vi o Nano in Ubuntu oppure TextEdit in macOS.To write Golang code, you can use a simple text editor, such as Notepad in Microsoft Windows, vi or Nano in Ubuntu, or TextEdit in macOS. Se si preferisce un ambiente IDE (Interactive Development Environment) avanzato, provare Gogland di Jetbrains, Visual Studio Code di Microsoft o Atom.If you prefer a richer Interactive Development Environment (IDE), try Gogland by Jetbrains, Visual Studio Code by Microsoft, or Atom.
  2. Incollare nei file di testo il codice Go riportato nelle sezioni seguenti, quindi salvare i file nella cartella del progetto con l'estensione *.go, ad esempio il percorso di Windows %USERPROFILE%\go\src\mysqlgo\createtable.go o il percorso di Linux ~/go/src/mysqlgo/createtable.go.Paste the Go code from the sections below into text files, and then save them into your project folder with file extension *.go (such as Windows path %USERPROFILE%\go\src\mysqlgo\createtable.go or Linux path ~/go/src/mysqlgo/createtable.go).
  3. Trovare le costanti HOST, DATABASE, USER e PASSWORD nel codice e quindi sostituire i valori di esempio con i propri valori.Locate the HOST, DATABASE, USER, and PASSWORD constants in the code, and then replace the example values with your own values.
  4. Avviare il prompt dei comandi o la shell Bash.Launch the command prompt or Bash shell. Passare alla cartella del progetto,Change directory into your project folder. ad esempio cd %USERPROFILE%\go\src\mysqlgo\ in Windows.For example, on Windows cd %USERPROFILE%\go\src\mysqlgo\. In Linux cd ~/go/src/mysqlgo/.On Linux cd ~/go/src/mysqlgo/. Alcuni degli editor dell'ambiente di sviluppo integrato indicati offrono funzionalità di debug e di runtime che non richiedono comandi della shell.Some of the IDE editors mentioned offer debug and runtime capabilities without requiring shell commands.
  5. Eseguire il codice digitando il comando go run createtable.go per compilare l'applicazione ed eseguirla.Run the code by typing the command go run createtable.go to compile the application and run it.
  6. In alternativa, per compilare il codice in un'applicazione nativa, digitare go build createtable.go e quindi avviare createtable.exe per eseguire l'applicazione.Alternatively, to build the code into a native application, go build createtable.go, then launch createtable.exe to run the application.

Connettersi, creare tabelle e inserire datiConnect, create table, and insert data

Usare il codice seguente per connettersi al server, creare una tabella e caricare i dati usando un'istruzione SQL INSERT.Use the following code to connect to the server, create a table, and load the data by using an INSERT SQL statement.

Il codice importa tre pacchetti: il pacchetto SQL, il driver go sql per MySql come driver per comunicare con il database di Azure per MySQL e il pacchetto fmt per l'input e l'output stampati nella riga di comando.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Il codice chiama il metodo sql.Open() per la connessione al database di Azure per MySQL e controlla la connessione usando il metodo db.Ping().The code calls method sql.Open() to connect to Azure Database for MySQL, and it checks the connection by using method db.Ping(). Viene usato un handle di database, contenente il pool di connessioni per il server di database.A database handle is used throughout, holding the connection pool for the database server. Il codice chiama il metodo Exec() più volte per eseguire diversi comandi DDL.The code calls the Exec() method several times to run several DDL commands. Il codice usa anche Prepare() ed Exec() per eseguire le istruzioni preparate con parametri diversi per inserire tre righe.The code also uses Prepare() and Exec() to run prepared statements with different parameters to insert three rows. Ogni volta viene usato un metodo checkError() personalizzato per controllare se si è verificato un errore e un metodo panic per uscire.Each time, a custom checkError() method is used to check if an error occurred and panic to exit.

Sostituire le costanti host, database, user e password con i propri valori.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

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

const (
    host     = "myserver4demo.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@myserver4demo"
    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.")
}

Leggere i datiRead data

Usare il codice seguente per connettersi e leggere i dati usando un'istruzione SQL SELECT.Use the following code to connect and read the data by using a SELECT SQL statement.

Il codice importa tre pacchetti: il pacchetto SQL, il driver go sql per MySql come driver per comunicare con il database di Azure per MySQL e il pacchetto fmt per l'input e l'output stampati nella riga di comando.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Il codice chiama il metodo sql.Open() per la connessione al database di Azure per MySQL e controlla la connessione usando il metodo db.Ping().The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Viene usato un handle di database, contenente il pool di connessioni per il server di database.A database handle is used throughout, holding the connection pool for the database server. Il codice chiama il metodo Query() per eseguire il comando SELECT.The code calls the Query() method to run the select command. Esegue quindi il metodo Next() per scorrere il set di risultati e Scan() per analizzare i valori delle colonne, salvando il valore nelle variabili.Then it runs Next() to iterate through the result set and Scan() to parse the column values, saving the value into variables. Ogni volta viene usato un metodo checkError() personalizzato per controllare se si è verificato un errore e un metodo panic per uscire.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Sostituire le costanti host, database, user e password con i propri valori.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

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

const (
    host     = "myserver4demo.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@myserver4demo"
    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.")
}

Aggiornare i datiUpdate data

Usare il codice seguente per connettersi e aggiornare i dati usando un'istruzione SQL UPDATE.Use the following code to connect and update the data using a UPDATE SQL statement.

Il codice importa tre pacchetti: il pacchetto SQL, il driver go sql per MySql come driver per comunicare con il database di Azure per MySQL e il pacchetto fmt per l'input e l'output stampati nella riga di comando.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Il codice chiama il metodo sql.Open() per la connessione al database di Azure per MySQL e controlla la connessione usando il metodo db.Ping().The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Viene usato un handle di database, contenente il pool di connessioni per il server di database.A database handle is used throughout, holding the connection pool for the database server. Il codice chiama il metodo Exec() per eseguire il comando UPDATE.The code calls the Exec() method to run the update command. Ogni volta viene usato un metodo checkError() personalizzato per controllare se si è verificato un errore e un metodo panic per uscire.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Sostituire le costanti host, database, user e password con i propri valori.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

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

const (
    host     = "myserver4demo.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@myserver4demo"
    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("Deleted %d row(s) of data.\n", rowCount)
    fmt.Println("Done.")
}

Eliminare i datiDelete data

Usare il codice seguente per connettersi e rimuovere i dati usando un'istruzione SQL DELETE.Use the following code to connect and remove data using a DELETE SQL statement.

Il codice importa tre pacchetti: il pacchetto SQL, il driver go sql per MySql come driver per comunicare con il database di Azure per MySQL e il pacchetto fmt per l'input e l'output stampati nella riga di comando.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Il codice chiama il metodo sql.Open() per la connessione al database di Azure per MySQL e controlla la connessione usando il metodo db.Ping().The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Viene usato un handle di database, contenente il pool di connessioni per il server di database.A database handle is used throughout, holding the connection pool for the database server. Il codice chiama il metodo Exec() per eseguire il comando DELETE.The code calls the Exec() method to run the delete command. Ogni volta viene usato un metodo checkError() personalizzato per controllare se si è verificato un errore e un metodo panic per uscire.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Sostituire le costanti host, database, user e password con i propri valori.Replace the host, database, user, and password constants with your own values.

package main

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

const (
    host     = "myserver4demo.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@myserver4demo"
    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.")
}

Passaggi successiviNext steps