SQL-databaser lagrar samlingar av data i rader och kolumner. Du kan hämta och uppdatera data i ett relationsdatabashanteringssystem (RDBMS) med hjälp av SQL-språket. Av de många tillgängliga SQL-databaserna är de mest populära MySQL, PostgreSQL, Microsoft SQL Server och SQLite.

Funktionalitet för att interagera med databaser i Go finns i databasen/sql-paketet, en del av standardbiblioteket.

Databasen/sql-paketet interagerar med SQL-databaser med hjälp av drivrutiner. Du kan importera ett lämpligt drivrutinspaket för ditt RDBMS och använda det för att interagera med databasen.

Komma igång med SQL-databaser i Go

Databas/sql-paketet är ett generiskt gränssnitt till relationsdatabaser. För att arbeta med en specifik databasserver måste du använda en av de många tillgängliga drivrutinerna.

Tack och lov behöver du inte oroa dig för specifika implementeringar utöver föraren. Databas/sql-paketet hanterar databasoperationer oberoende av servern du ansluter till.

Några av de mest populära Go-databasdrivrutinerna är:

instagram viewer
  • Go-SQL-drivrutin (MySQL)
  • PQ (PostgreSQL)
  • Go-SQLite3 (SQLite)
  • MSSQL DB (Microsoft SQL Server)

Du kan använda LibHunt drivrutinslista att hitta motsvarigheter till andra databastyper. Listan visar också den relativa populariteten för varje databassystem:

Installera och importera Go Database-drivrutiner

När du har skapat en Go-arbetsyta och initierat en Go-modulfil installerar du drivrutinen som matchar ditt databassystem. Kör till exempel ett av följande kommandon i din arbetsytakatalog för att installera MySQL- eller SQLite-drivrutinen:

skaffa -u github.com/go-sql-driver/mysql
skaffa github.com/mattn/go-sqlite3

När du har installerat din drivrutin, importera den för biverkningar genom att sätta ett understreck före paketet. Till exempel, för att importera MySQL-drivrutinen tillsammans med databasen/sql-paketet:

importera (
"databas/sql"
_ "github.com/-sql-drivrutin/mysql"
)

Genom att importera drivrutinspaketet för biverkningar kan du använda det för att ansluta till och utföra operationer på databasen.

Ansluta till en SQL-databas med Go

Efter att ha importerat databasdrivrutinerna kan du skapa en databasanslutning med hjälp av Öppna metoden för databas/sql paket. Denna metod tar förarens namn och sökväg till databasen (för SQLite) eller en anslutningssträng (för MySQL). Använd till exempel något av följande:

db, err := sql. Open("sqlite3", "models/testdb.db") // SQLite

db, err := sql. Öppna("mysql", "användare: lösenord@/dbnamn") // MySQL

När du har försökt öppna anslutningen, kom ihåg att leta efter ett fel:

om fel!= noll {
logga. Fatalln (fel)
}

Beroende på ditt databassystem, Öppna metod kan returnera ett fel om databasen inte finns. När du har anslutit till en databas kan du köra frågor och förbereda satser med hjälp av databasinstansen som Öppna returnerar.

Utföra SQL-kommandon

Du kan kör SQL-kommandon använda Förbereda metod för din databasinstans. De Förbereda metod tar in ett SQL-kommando och returnerar en förberedd sats för exekvering tillsammans med ett felobjekt. Om du till exempel vill skapa en ny tabell:

kommando, err := db. Prepare("SKAPA TABELL OM INTE FINNS inloggning (användarnamn TEXT, lösenord TEXT)")

Uttalandet ovan skapar en tabell med namnet logga in, om det inte redan finns. Den nya tabellen har namngivna fält Användarnamn och Lösenord, var och en av typ TEXT.

Om du infogar värden från ditt program i dina frågor, kan du använda frågetecken (?) notation för att beteckna platshållare och sedan skicka parametrarna vid exekvering av satsen.

kommando, err := db. Prepare("INSERT INTO login (användarnamn, lösenord) värden(?,?)")

När du har skapat ett förberett uttalande kan du köra det med hjälp av dess Exec metod. Den här metoden låter dig skicka parametervärden från ditt program:

exec, err := kommando. Exec (värde1, värde2)

om fel!= noll {
lämna tillbaka
}

Det första värdet som Exec() returns är resultatet av SQL-frågan på din databas. Med det här frågeresultatet kan du kontrollera antalet berörda rader eller det senast infogade ID: t:

påverkad, fel := exec. RowsAffected()

om fel!= noll {
lämna tillbaka
}

fmt. Println (berörd)

id, err := exec. LastInsertId()

om fel!= noll {
lämna tillbaka
}

fmt. Println (id)

Hämtar frågeresultat

Databas/sql-paketet låter dig fråga databasresultat med hjälp av Fråga metod för en databasinstans:

rader, fel := db. Fråga ("SELECT * FROM User")

om fel!= noll {
lämna tillbaka
}

De Fråga metod returnerar en Rader struktur som du kan använda för att arbeta med din resultatuppsättning. Du kan till exempel använda Nästa metod för din radinstans för att iterera över den och arbeta med enskilda rader:

var användarnamn Lösenord sträng

för rader. Nästa() {
fel := rader. Skanna (&användarnamn, &lösenord)

om fel!= noll {
logga. Fatalln (fel)
}

fmt. Println (användarnamn, lösenord)
}

I exemplet ovan, två strängvariabler—Användarnamn och Lösenord—representera varje kolumnvärde. De Skanna metod avkodar den aktuella raden till motsvarande variabler.

SQL-databaser kommer alltid till hands

Att använda databaser i Go är enkelt med databasen/sql-paketet. Du kan använda den för att fråga och utföra SQL-kommandon i Go med lätthet.

SQL-databaser är kärnan i många applikationer, särskilt de som hanterar stora eller komplexa datamängder. Du kan använda databaser som SQLite-databasen i minnet för dina enkla projekt som webbskrapning och att bygga bots.

Korrekt kunskap om SQL och databashanteringssystem är avgörande för att kunna använda dem effektivt i dina program. Men om du väljer att inte lära dig SQL kan du lära dig hur du använder ORM för att interagera med SQL-databaser i Go.