Connessione a MySQL e MariaDB in Go con GORM

Mattepuffo's logo
Connessione a MySQL e MariaDB in Go con GORM

Connessione a MySQL e MariaDB in Go con GORM

GORM è senza dubbio l'ORM più usato in ambito Go.

Se usate già altri ORM tipo Eloquent, non dovreste avere problemi.

In questo articolo vediamo come usarlo per connetterci a MariaDB (ma vale anche per MySQL).

Alcune considerazioni:

  • la mia tabella non ha un campo ID auto increment; la Primary Key è il campo video_titolo
  • ho "forzato" il nome della tabella a mio piacimento
  • le tabelle sono tutte create, quindi non ho usato le migrations
  • solo tre campi sono obbligatori in fase di inserimento

Detto ciò partiamo con l'installazione:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

Qui sotto un esempio di codice in cui:

  • facciamo un inserimento
  • se va a buon fine eseguiamo una query
  • sennò stampiamo l'errore
package main

import (
	"fmt"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Video struct {
	VideoTitolo       string `gorm:"primaryKey"`
	VideoFormat       *string
	VideoCodec        *string
	VideoSize         *float32
	VideoWidth        *int32
	VideoHeight       *int32
	VideoDuration     *string
	VideoDataAggiunta time.Time
	VideoDataModifica time.Time
}

type Tabler interface {
	TableName() string
}

func (Video) TableName() string {
	return "video"
}

func main() {
	dsn := "DBUSER:DBPASSWORD@tcp(DBHOST:3306)/DBNOME?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

	if err != nil {
		fmt.Println(err)
	}

	newVideo := Video{VideoTitolo: "TEST", VideoDataAggiunta: time.Now(), VideoDataModifica: time.Now()}
	resultAdd := db.Create(newVideo)
	fmt.Println(newVideo.VideoTitolo, resultAdd)

	if resultAdd.Error != nil {
		fmt.Println(resultAdd.Error)
	} else {
		var videos []Video
		result := db.Find(&videos)

		fmt.Println("----------")
		fmt.Println(result.RowsAffected)
		for _, row := range videos {
			fmt.Println(row.VideoTitolo, row.VideoFormat, row.VideoDataAggiunta.Format(time.DateOnly))
		}
	}

}

Se lo eseguite due volte di fila otterrete un errore, in quanto il titolo già esiste ed è Primary Key.

Enjoy!


Condividi

Commentami!