Schnellstart: Verwenden von Go zum Herstellen einer Verbindung und zum Abfragen von Daten in Azure Database for MySQL
GILT FÜR: Azure Database for MySQL – Flexibler Server
In dieser Schnellstartanleitung erfahren Sie, wie Sie unter Windows, Linux (Ubuntu) und macOS (Apple) mithilfe von Code in der Programmiersprache Go eine Verbindung mit einer Azure Database for MySQL-Instanz herstellen. Es wird veranschaulicht, wie Sie SQL-Anweisungen zum Abfragen, Einfügen, Aktualisieren und Löschen von Daten in der Datenbank verwenden. Bei den Schritten in diesem Artikel wird davon ausgegangen, dass Sie mit der Go-Entwicklung vertraut sind und noch keine Erfahrung mit Azure Database for MySQL haben.
Voraussetzungen
In diesem Schnellstart werden die Ressourcen, die in den folgenden Anleitungen erstellt wurden, als Startpunkt verwendet:
- Erstellen einer Instanz von „Azure Database for MySQL – flexibler Server“ mit dem Azure-Portal
- Erstellen einer Instanz von „Azure Database for MySQL – flexibler Server“ mit der Azure CLI
Wichtig
Es wird empfohlen, einen Server mit aktiviertem öffentlichem Zugriff (zulässige IP-Adressen) für diesen Schnellstart zu verwenden. Für die Durchführung dieses Schnellstarts mit einem Server mit aktiviertem privatem Zugriff (VNet-Integration) sind unter Umständen zusätzliche Schritte erforderlich, die hier nicht behandelt werden.
Sicherstellen, dass der IP-Adresse, über die Sie eine Verbindung herstellen, die Firewallregeln des Servers über das Azure-Portal oder die Azure CLI hinzugefügt wurden
Installieren von Go und dem MySQL-Connector
Installieren Sie auf Ihrem Computer Go und den „go-sql“-Treiber für MySQL. Führen Sie je nach Plattform die folgenden Schritte im entsprechenden Abschnitt aus:
Laden Sie Go für Microsoft Windows herunter, und installieren Sie es gemäß der Installationsanleitung.
Starten Sie die Eingabeaufforderung über das Startmenü.
Erstellen Sie einen Ordner für Ihr Projekt, z. B. „
mkdir %USERPROFILE%\go\src\mysqlgo
“.Wechseln Sie zum Projektordner. Beispiel:
cd %USERPROFILE%\go\src\mysqlgo
.Legen Sie die Umgebungsvariable für GOPATH so fest, dass sie auf das Quellcodeverzeichnis verweist:
set GOPATH=%USERPROFILE%\go
.Führen Sie go mod init aus, um ein Modul im aktuellen Verzeichnis zu erstellen. Beispiel:
go mod init mysqlgo
- Der Parameter
<module_path>
ist im Allgemeinen ein Speicherort in einem GitHub-Repository, etwagithub.com/<your_github_account_name>/<directory>
. - Wenn Sie eine Befehlszeilen-App als Test erstellen und die App nicht veröffentlichen, muss
<module_path>
nicht auf einen tatsächlichen Speicherort verweisen. Beispiel:mysqlgo
.
- Der Parameter
Führen Sie den Befehl
go get github.com/go-sql-driver/mysql
aus, um den Go-SQL-Treiber für MySQL zu installieren.Zusammenfassung: Installieren Sie Go, und führen Sie anschließend an der Eingabeaufforderung die folgenden Befehle aus:
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
Abrufen von Verbindungsinformationen
Rufen Sie die Verbindungsinformationen ab, die zum Herstellen einer Verbindung mit der Azure SQL-Datenbank für MySQL erforderlich sind. Sie benötigen den vollqualifizierten Servernamen und die Anmeldeinformationen.
- Melden Sie sich beim Azure-Portalan.
- Klicken Sie im Azure-Portal im linken Menü auf Alle Ressourcen, und suchen Sie dann nach dem soeben erstellten Server, z.B. mydemoserver.
- Klicken Sie auf den Servernamen.
- Notieren Sie sich im Bereich Übersicht des Servers den Servernamen und den Anmeldenamen des Serveradministrators. Wenn Sie Ihr Kennwort vergessen haben, können Sie es in diesem Bereich auch zurücksetzen.
Erstellen und Ausführen von Go-Code
- Golang-Code kann in einem einfachen Text-Editor wie dem Editor (Microsoft Windows), vi oder Nano (Ubuntu) oder TextEdit (macOS) geschrieben werden. Falls Sie eine umfangreichere interaktive Entwicklungsumgebung (Interactive Development Environment, IDE) bevorzugen, können Sie Gogland von Jetbrains, Visual Studio Code von Microsoft oder Atom verwenden.
- Fügen Sie den Go-Code aus den Abschnitten weiter unten in Textdateien ein, und speichern Sie sie in Ihrem Projektordner mit der Dateierweiterung „.go“ – (beispielsweise Windows-Pfad
%USERPROFILE%\go\src\mysqlgo\createtable.go
oder Linux-Pfad~/go/src/mysqlgo/createtable.go
). - Suchen Sie im Code nach den Konstanten
host
,database
,user
undpassword
, und ersetzen Sie dann die Beispielwerte durch Ihre eigenen Werte. Wenn Sie die Serverinstanz von Azure Database for MySQL erstellen, wird eine Standarddatenbank namens flexibleserverdb erstellt. Sie können diese Datenbank oder eine andere erstellte Datenbank verwenden. - Starten Sie die Eingabeaufforderung oder Bash-Shell. Wechseln Sie in das Verzeichnis Ihres Projektordners. Beispiel für Windows:
cd %USERPROFILE%\go\src\mysqlgo\
. Beispiel für Linux:cd ~/go/src/mysqlgo/
. Einige der genannten IDE-Editoren bieten Debug- und Laufzeitfunktionen ohne Shell-Befehle. - Geben Sie den Befehl
go run createtable.go
ein, um den Code auszuführen und die Anwendung zu kompilieren und auszuführen. - Falls Sie aus dem Code eine native Anwendung erstellen möchten, führen Sie stattdessen
go build createtable.go
aus, und starten Sie anschließendcreatetable.exe
, um die Anwendung auszuführen.
Herstellen der Verbindung, Erstellen der Tabelle und Einfügen von Daten
Verwenden Sie den folgenden Code, um eine Verbindung mit dem Server herzustellen, eine Tabelle zu erstellen und die Daten unter Verwendung einer SQL-Anweisung des Typs INSERT zu laden.
Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.
Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure Database for MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Der Code ruft mehrmals die Exec()-Methode auf, um mehrere DDL-Befehle auszuführen. Außerdem verwendet der Code die Methoden Prepare() und „Exec()“, um vorbereitete Anweisungen mit unterschiedlichen Parametern auszuführen und drei Zeilen einzufügen. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.
Ersetzen Sie die Konstanten host
, database
, user
und password
durch Ihre eigenen Werte.
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.")
}
Lesen von Daten
Verwenden Sie den folgenden Code, um die Daten mit einer SQL-Anweisung des Typs SELECT zu verbinden und zu lesen.
Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.
Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Der Code ruft die Query()-Methode auf, um den select-Befehl auszuführen. Anschließend wird Next() ausgeführt, um das Resultset zu durchlaufen, und Scan(), um die Spaltenwerte zu analysieren und den Wert in Variablen zu speichern. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.
Ersetzen Sie die Konstanten host
, database
, user
und password
durch Ihre eigenen Werte.
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.")
}
Aktualisieren von Daten
Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und die Daten per UPDATE-SQL-Anweisung zu aktualisieren.
Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.
Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Der Code ruft die Exec()-Methode auf, um den update-Befehl auszuführen. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.
Ersetzen Sie die Konstanten host
, database
, user
und password
durch Ihre eigenen Werte.
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.")
}
Löschen von Daten
Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und die Daten mithilfe einer SQL-Anweisung vom Typ DELETE zu entfernen.
Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.
Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Der Code ruft die Exec()-Methode auf, um den delete-Befehl auszuführen. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.
Ersetzen Sie die Konstanten host
, database
, user
und password
durch Ihre eigenen Werte.
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.")
}
Bereinigen von Ressourcen
Löschen Sie die Ressourcengruppe mit dem folgenden Befehl, um alle in dieser Schnellstartanleitung verwendeten Ressourcen zu bereinigen:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes