Guia de início rápido: use o idioma Go para conectar e consultar dados no Banco de Dados do Azure para MySQL
APLICA-SE A: Banco de Dados do Azure para MySQL - Servidor Único
Importante
O servidor único do Banco de Dados do Azure para MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?
Este guia de introdução demonstra como se pode ligar a uma Base de Dados do Azure para MySQL a partir de plataformas Windows, Ubuntu, Linux e Apple macOS com código escrito na linguagem Go. Explica como utilizar as instruções SQL para consultar, inserir, atualizar e eliminar dados da base de dados. Este tópico pressupõe que está familiarizado com a programação com Go e que nunca trabalhou com a Base de Dados do Azure para MySQL.
Pré-requisitos
Este guia de início rápido utiliza os recursos criados em qualquer um desTes guias como ponto de partida:
- Criar uma Base de Dados do Azure para o servidor MySQL com o portal do Azure
- Criar uma Base de Dados do Azure para o servidor MySQL com a CLI do Azure
Importante
Verifique se o endereço IP do qual você está se conectando foi adicionado às regras de firewall do servidor usando o portal do Azure ou a CLI do Azure
Instalar o Go e o conector MySQL
Instale o Go e o go-sql-driver para MySQL no computador. Dependendo da sua plataforma, siga os passos na secção apropriada:
Transfira e instale o Go para o Microsoft Windows, de acordo com as instruções de instalação.
Inicie a linha de comandos a partir do menu Iniciar.
Crie uma pasta para o seu projeto, como
mkdir %USERPROFILE%\go\src\mysqlgo
.Altere o diretório para a pasta do projeto, como
cd %USERPROFILE%\go\src\mysqlgo
.Defina a variável de ambiente de GOPATH para apontar para o diretório do código de origem.
set GOPATH=%USERPROFILE%\go
.Execute o comando
go get github.com/go-sql-driver/mysql
para instalar o go-sql-driver para mysql.Para resumir, instale o Go e, em seguida, execute estes comandos na linha de comandos:
mkdir %USERPROFILE%\go\src\mysqlgo cd %USERPROFILE%\go\src\mysqlgo set GOPATH=%USERPROFILE%\go go get github.com/go-sql-driver/mysql
Obter informações da ligação
Obtenha as informações de ligação necessárias para se ligar à Base de Dados do Azure para MySQL. Necessita do nome do servidor e das credenciais de início de sessão totalmente qualificados.
- Inicie sessão no portal do Azure.
- No menu esquerdo do portal do Azure, clique em Todos os recursos e, em seguida, procure o servidor que acabou de criar, (por exemplo, mydemoserver).
- Clique no nome do servidor.
- No painel Descrição geral do servidor, tome nota do Nome do servidor e do Nome de início de sessão de administrador do servidor. Caso se esqueça da sua palavra-passe, também pode repor a palavra-passe neste painel.
Criar e executar código Go
- Para escrever o código Golang, pode utilizar um editor de textos simples, como o Blobo de Notas no Microsoft Windows, o vi ou o Nano no Ubuntu ou o TextEdit em macOS. Se preferir um Ambiente de Desenvolvimento Interativo (IDE) rico, experimente o Gogland, da Jetbrains, o Visual Studio Code, da Microsoft, ou o Atom.
- Cole o código Go das seções abaixo em arquivos de texto e, em seguida, salve-os na pasta do projeto com a extensão de arquivo *.go (como caminho do Windows ou caminho
%USERPROFILE%\go\src\mysqlgo\createtable.go
~/go/src/mysqlgo/createtable.go
do Linux ). - Localize as constantes
HOST
,DATABASE
,USER
ePASSWORD
no código e, em seguida, substitua os valores de exemplo pelos seus próprios valores. - Inicie a linha de comandos ou a shell de Bash. Altere o diretório para a pasta do projeto . Por exemplo, no Windows
cd %USERPROFILE%\go\src\mysqlgo\
. No Linux,cd ~/go/src/mysqlgo/
. Alguns dos editores de IDE mencionados oferecem capacidades de depuração e runtime sem que sejam necessários comandos da shell. - Execute o código com o comando
go run createtable.go
, para compilar a aplicação e executá-la. - Em alternativa, para criar o código numa aplicação nativa,
go build createtable.go
, e iniciecreatetable.exe
para executar a aplicação.
Ligar, criar tabela e inserir dados
Utilize o seguinte código para se ligar ao servidor, criar uma tabela e carregar os dados com uma instrução SQL INSERT.
O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.
O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o métodoExec() várias vezes para executar vários comandos DDL. Também utiliza Prepare() e Exec() para executar instruções preparadas com diferentes parâmetros para inserir três linhas. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método "panic", para sair.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
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.")
}
Ler dados
Utilize o código seguinte para se ligar e ler dados com uma instrução SQL SELECT.
O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.
O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Query() para executar o comando de seleção. Em seguida, executaNext() para iterar o conjunto de resultados e Scan() para analisar os valores das colunas, guardando os valores em variáveis. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
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.")
}
Atualizar dados
Utilize o código seguinte para se ligar e atualizar os dados com uma instrução SQL UPDATE.
O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.
O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar o comando de atualização. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
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.")
}
Eliminar dados
Utilize o código seguinte para se ligar e remover os dados com uma instrução SQL DELETE.
O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.
O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar o comando de eliminação. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
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.")
}
Clean up resources (Limpar recursos)
Para limpar todos os recursos usados durante este início rápido, exclua o grupo de recursos usando o seguinte comando:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes