rychlý start: použití Golang k dotazování databáze ve službě Azure SQL Database nebo v Azure SQL Managed Instance
PLATÍ PRO:
Azure SQL Database Azure SQL Managed Instance
v tomto rychlém startu použijete programovací jazyk Golang pro připojení k databázi ve službě Azure SQL Database nebo Azure SQL Managed Instance. pak spustíte příkazy Transact-SQL pro dotazování a úpravu dat. Golang je open source programovací jazyk, který usnadňuje sestavování jednoduchého, spolehlivého a efektivního softwaru.
Požadavky
Co budete potřebovat k dokončení tohoto rychlého startu:
Účet Azure s aktivním předplatným. Vytvořte si účet zdarma.
databáze v Azure SQL Database nebo Azure SQL Managed Instance. K vytvoření databáze můžete použít jeden z těchto rychlých startů:
Databáze SQL Spravovaná instance SQL SQL Server na virtuálním počítači Azure Vytvořit Azure Portal Azure Portal Azure Portal Vytvořit Rozhraní příkazového řádku Rozhraní příkazového řádku Vytvořit PowerShell PowerShell PowerShell Konfigurace Pravidlo brány firewall protokolu IP na úrovni serveru Připojení z virtuálního počítače Konfigurace Připojení z místního prostředí Připojení instance SQL Server Načtení dat Načtený Adventure Works pro každý rychlý Start Obnovení celosvětových dovozců Obnovení celosvětových dovozců Načtení dat Obnovení nebo import Adventure Works ze souboru BacPac z GitHub Obnovení nebo import Adventure Works ze souboru BacPac z GitHub Důležité
Skripty v tomto článku jsou určeny k používání databáze Adventure Works. pomocí spravované Instance SQL musíte buď importovat databázi adventure Works do databáze Instance, nebo upravit skripty v tomto článku, aby používaly databázi World importers.
Golang a související software pro nainstalovaný operační systém:
Získat informace o připojení k serveru
Získejte informace o připojení, které potřebujete pro připojení k databázi. Pro nadcházející postupy budete potřebovat plně kvalifikovaný název serveru nebo název hostitele, název databáze a přihlašovací údaje.
Přihlaste se k webu Azure Portal.
přejděte na stránku databáze SQL nebo SQL spravované instance .
na stránce přehled zkontrolujte plně kvalifikovaný název serveru vedle názvu serveru pro databázi v Azure SQL Database nebo plně kvalifikovaného názvu serveru (nebo IP adresy) vedle hostitele pro spravovanou instanci azure SQL nebo SQL Server na virtuálním počítači azure. Pokud chcete zkopírovat název serveru nebo název hostitele, najeďte na něj ukazatelem myši a vyberte ikonu kopírování .
Poznámka
informace o připojení pro SQL Server na virtuálním počítači Azure najdete v tématu Připojení instance SQL Server.
Vytvoření projektu a závislostí golang
Z terminálu vytvořte složku nového projektu s názvem SqlServerSample.
mkdir SqlServerSamplepřejděte na SqlServerSample a nainstalujte ovladač SQL Server pro přejít.
cd SqlServerSample go get github.com/denisenkom/go-mssqldb
Vytvoření ukázkových dat
V textovém editoru vytvořte ve složce SqlServerSample soubor s názvem CreateTestData. SQL . do souboru vložte tento T-SQL kód, který vytvoří schéma, tabulku a vloží několik řádků.
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'Tom', N'Germany'); GO SELECT * FROM TestSchema.Employees; GOslouží
sqlcmdk připojení k databázi a spuštění nově vytvořeného skriptu Azure SQL. Hodnoty pro server, databázi, uživatelské jméno a heslo nahraďte příslušnými hodnotami.sqlcmd -S <your_server>.database.windows.net -U <your_username> -P <your_password> -d <your_database> -i ./CreateTestData.sql
Vložení kódu pro dotaz do databáze
Ve složce SqlServerSample vytvořte soubor sample.go.
Do tohoto souboru vložte tento kód. Přidejte hodnoty pro váš server, databázi, uživatelské jméno a heslo. V tomto příkladu se používají metody kontextu golang, aby bylo zajištěno, že existuje aktivní připojení.
package main import ( _ "github.com/denisenkom/go-mssqldb" "database/sql" "context" "log" "fmt" "errors" ) var db *sql.DB var server = "<your_server.database.windows.net>" var port = 1433 var user = "<your_username>" var password = "<your_password>" var database = "<your_database>" func main() { // Build connection string connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;", server, user, password, port, database) var err error // Create connection pool db, err = sql.Open("sqlserver", 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() }
Spuštění kódu
Na příkazovém řádku spusťte následující příkaz.
go run sample.goOvěřte výstup.
Connected! Inserted ID: 4 successfully. ID: 1, Name: Jared, Location: Australia ID: 2, Name: Nikita, Location: India ID: 3, Name: Tom, Location: Germany ID: 4, Name: Jake, Location: United States Read 4 row(s) successfully. Updated 1 row(s) successfully. Deleted 1 row(s) successfully.