Snabbstart: Använda Go-språk för att ansluta och fråga efter data i Azure Database for MySQL
Den här snabbstarten visar hur du ansluter till en Azure Database for MySQL från Windows, Ubuntu Linux och Apple macOS-plattformar med hjälp av kod som har skrivits på språket Go. Den visar hur du använder SQL-instruktioner för att fråga, infoga, uppdatera och ta bort data i databasen. Det här avsnittet förutsätter att du är van att utveckla i Go och att du saknar erfarenhet av Azure Database for MySQL.
Förutsättningar
I den här snabbstarten används de resurser som skapades i någon av följande guider som utgångspunkt:
- Snabbstart: Skapa en instans av Azure Database for MySQL med Azure Portal
- Snabbstart: Skapa en instans av Azure Database for MySQL – flexibel server med hjälp av Azure CLI
Viktigt!
Vi rekommenderar att du använder en server med offentlig åtkomst (tillåtna IP-adresser) aktiverad för den här snabbstarten. Att använda en server med privat åtkomst (VNet-integrering) aktiverad för att slutföra den här snabbstarten kan innebära extra steg som inte omfattas.
Kontrollera att IP-adressen som du ansluter från har lagts till serverns brandväggsregler med hjälp av Hantera brandväggsregler för Azure Database for MySQL – flexibel server med hjälp av Azure Portal eller Hantera brandväggsregler för Azure Database for MySQL – flexibel server med Azure CLI
Installera en anslutningsapp för Go och MySQL
Installera Go och go-sql-driver for MySQL på din egen dator. Följ instruktionerna för din plattform:
Ladda ned och installera Go för Microsoft Windows enligt installationsanvisningarna.
Starta kommandotolken från Start-menyn.
Skapa en mapp för ditt projekt, till exempel
mkdir %USERPROFILE%\go\src\mysqlgo
.Ändra katalogen till projektmappen, till exempel
cd %USERPROFILE%\go\src\mysqlgo
.Ange miljövariabeln för GOPATH så att den pekar på källkodskatalogen:
set GOPATH=%USERPROFILE%\go
.Kör kör mod init för att skapa en modul i den aktuella katalogen. Exempel:
go mod init mysqlgo
.- Parametern
<module_path>
är vanligtvis en plats i en GitHub-lagringsplats , till exempelgithub.com/<your_github_account_name>/<directory>
. - När du skapar en kommandoradsapp som ett test och inte publicerar appen
<module_path>
behöver den inte referera till en faktisk plats. Exempel:mysqlgo
- Parametern
Installera go-sql-driver for mysql genom att köra kommandot
go get github.com/go-sql-driver/mysql
.Sammanfattningsvis ska du installera Go och sedan köra dessa kommandon i kommandotolken:
mkdir %USERPROFILE%\go\src\mysqlgo cd %USERPROFILE%\go\src\mysqlgo set GOPATH=%USERPROFILE%\go go mod init mysqlgo go get github.com/go-sql-driver/mysql
Hämta anslutningsinformation
Skaffa den information som du behöver för att ansluta till Azure Database för MySQL. Du behöver det fullständiga servernamnet och inloggningsuppgifter.
- Logga in på Azure-portalen.
- På den vänstra menyn i Azure Portal väljer du Alla resurser och söker sedan efter den server som du har skapat (till exempel mydemoserver).
- Välj servernamnet.
- På serverpanelen Översikt antecknar du Servernamn och Inloggningsnamn för serveradministratören. Om du glömmer lösenordet kan du även återställa det på den här panelen.
Skapa och köra Go-kod
- Om du vill skriva Golang-kod kan du använda en enkel textredigerare, som Anteckningar i Microsoft Windows, vieller Nano i Ubuntu eller TextEdit i macOS. Om du föredrar en mer omfattande IDE (Interactive Development Environment) kan du prova Gogland från Jetbrains, Visual Studio Code från Microsoft eller Atom.
- Klistra in Go-koden från avsnitten nedan i textfiler och spara dem sedan i projektmappen med filnamnstillägget *.go (till exempel Windows-sökväg
%USERPROFILE%\go\src\mysqlgo\createtable.go
eller Linux-sökväg~/go/src/mysqlgo/createtable.go
). - Leta upp konstanterna
host
,database
,user
ochpassword
i koden och ersätt sedan exempelvärdena med dina egna värden. En databas med namnet flexibleserverdb skapas när du skapar din Azure Database for MySQL-serverinstans. Du kan använda databasen eller en annan som du har skapat. - Starta kommandotolken eller Bash-gränssnittet. Ändra katalog till din projektmapp. I Windows kan du till exempel använda
cd %USERPROFILE%\go\src\mysqlgo\
. I Linux kan du användacd ~/go/src/mysqlgo/
. Några av de IDE-redigerare som nämns erbjuder funktioner för felsökning och körning utan att kräva shell-kommandon. - Kör koden genom att skriva kommandot
go run createtable.go
för att kompilera programmet och köra det. - Alternativt bygger du koden till ett internt program,
go build createtable.go
, och kör sedancreatetable.exe
för att köra programmet.
Ansluta, skapa tabell och infoga data
Använd följande kod för att ansluta till servern, skapa en tabell och läsa in data med hjälp av SQL-instruktionen INSERT.
Koden importerar tre paket: sql-paketet, go sql driver for mysql som en drivrutin för att kommunicera med Azure Database för MySQL och fmt-paketet för skrivna indata och utdata på kommandoraden.
I koden anropas metoden sql.Open() för att ansluta till Azure Database for MySQL, och anslutningen kontrolleras med hjälp av metoden db.Ping(). En databasreferens som håller anslutningspoolen för databasservern används genomgående. I koden anropas metoden Exec() flera gånger för att köra flera DDL-kommandon. I koden används också Prepare() och Exec() som kör förberedda instruktioner med olika parametrar för att infoga tre rader. Varje gång används en anpassad checkError()-metod för att kontrollera om ett fel har uppstått, och i så fall avslutas körningen direkt.
Ersätt konstanterna host
, database
, user
och password
med egna värden.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
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&tls=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.")
}
Läsa data
Använd följande kod för att ansluta och läsa data med en SELECT-SQL-instruktion.
Koden importerar tre paket: sql-paketet, go sql driver for mysql som en drivrutin för att kommunicera med Azure Database för MySQL och fmt-paketet för skrivna indata och utdata på kommandoraden.
I koden anropas metoden sql.Open() för att ansluta till Azure Database för MySQL. Anslutningen kontrolleras med hjälp av metoden db.Ping(). En databasreferens som håller anslutningspoolen för databasservern används genomgående. Koden anropar Query()-metoden för att köra det valda kommandot. Sedan kör den Next() att gå igenom resultatuppsättningen och Scan() för att parsa kolumnvärdena och sparar värdet i variabler. Varje gång använda en anpassad checkError()-metod för att kontrollera om ett fel har uppstått, och i så fall avslutas körningen direkt.
Ersätt konstanterna host
, database
, user
och password
med egna värden.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
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&tls=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.")
}
Uppdatera data
Använd följande kod för att ansluta och uppdatera data med en UPDATE-SQL-instruktion.
Koden importerar tre paket: sql-paketet, go sql driver for mysql som en drivrutin för att kommunicera med Azure Database för MySQL och fmt-paketet för skrivna indata och utdata på kommandoraden.
I koden anropas metoden sql.Open() för att ansluta till Azure Database för MySQL. Anslutningen kontrolleras med hjälp av metoden db.Ping(). En databasreferens som håller anslutningspoolen för databasservern används genomgående. Koden anropar Exec()-metoden för att köra uppdateringskommandot. Varje gång använda en anpassad checkError()-metod för att kontrollera om ett fel har uppstått, och i så fall avslutas körningen direkt.
Ersätt konstanterna host
, database
, user
och password
med egna värden.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
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&tls=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.")
}
Ta bort data
Använd följande kod för att ansluta och ta bort data med en DELETE-SQL-instruktion.
Koden importerar tre paket: sql-paketet, go sql driver for mysql som en drivrutin för att kommunicera med Azure Database för MySQL och fmt-paketet för skrivna indata och utdata på kommandoraden.
I koden anropas metoden sql.Open() för att ansluta till Azure Database för MySQL. Anslutningen kontrolleras med hjälp av metoden db.Ping(). En databasreferens som håller anslutningspoolen för databasservern används genomgående. Koden anropar den Exec()-metod som används för att köra borttagningskommandot. Varje gång använda en anpassad checkError()-metod för att kontrollera om ett fel har uppstått, och i så fall avslutas körningen direkt.
Ersätt konstanterna host
, database
, user
och password
med egna värden.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
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&tls=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.")
}
Rensa resurser
Om du vill rensa alla resurser som används under den här snabbstarten tar du bort resursgruppen med följande kommando:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes