Mémorandum de migration avec GORM

introduction

Notez la partie sur laquelle j'ai étudié un peu, comme la définition du modèle avec struct et la migration avec ʻAutoMigrate`.

Pour utiliser UUID pour ID

Je voulais être en mesure de spécifier un UUID fixe lors du test et de la saisie de données de départ tout en laissant la génération automatique de l'UUID à la bibliothèque, j'ai donc pris les mesures suivantes.

Tout d'abord, définissez le modèle dans struct

package model

import (
	"github.com/go-playground/validator/v10"
	"github.com/google/uuid"
)

type User struct {
  ID string `validate:"is_valid_uuid" gorm:"primaryKey;size:255;default:uuid_generate_v4()" json:"id"`
  ...
}

//Si l'ID ne vient pas, ne le validez pas, et si c'est le cas, vérifiez s'il s'agit d'un UUID
validate := validator.New()
validate.RegisterValidation("is_valid_uuid", isValidUUID)

func isValidUUID(fl v.FieldLevel) bool {
	id := fl.Field().String()
	if len(id) == 0 {
		return true
	}
	_, err := uuid.Parse(id)
	return err == nil
}

Pour utiliser ʻuuid_generate_v4 () ci-dessus, installez l'extension ʻuuid-ossp sur postgres avant ʻAutoMigrate (& User {})`

db, err = gorm.Open("postgres", fmt.Sprintf(
  "host=%s port=%s user=%s password=%s dbname=%s", host, port, user, password, dbname,
))

if err != nil {
  panic(err)
}

db.Exec(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`)

result := db.AutoMigrate(&model.User{})
...

Pour utiliser le type enum Postgres

Spécifiez le type avec la balise de struct

type User struct {
  Role string `validate:"is_valid_role" gorm:"type:role_enum;default:'user'" json:"role"`
  ...
}

ʻAjouter une définition de type aux postgres avant AutoMigrate`

db.Exec(`
DO
$$
BEGIN
  IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role_enum') THEN
    create type role_enum AS ENUM ('admin', 'editor', 'user');
  END IF;
END
$$;
`)

result := db.AutoMigrate(&model.User{})
...

Sommaire

C'était un mémo sur la migration de GORM. S'il y en a d'autres, je les ajouterai.

Recommended Posts

Mémorandum de migration avec GORM
Mémorandum lors de l'exécution de Python sur EC2 avec Apache
Mémorandum elasticsearch_dsl
Mémorandum sur le QueryDict de Django
Résumé de l'extrait de code lors du développement avec Go
Un mémorandum de problème lors du formatage des données
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
Mémorandum de sed
Un mémorandum de méthode souvent utilisé lors de l'analyse de données avec des pandas (pour les débutants)
[PyTorch] Un peu de compréhension de CrossEntropyLoss avec des formules mathématiques
Analyse des données de mesure ①-Mémorandum de montage scipy-
Résumé des problèmes lors de la segmentation sémantique avec Pytorch
Mémorandum de construction de l'environnement de la bibliothèque AutoML PyCaret
Un mémorandum lorsqu'une erreur se produit avec pip install
Points à garder à l'esprit lors de la migration avec Django
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
Précautions lors du calcul avec une chaîne pour TmeStampType de PySpark
Mémorandum de fastText (édition)
mémorandum de commande vi
1. Statistiques apprises avec Python 2. Distribution des probabilités [Compréhension approfondie de scipy.stats]
Une collection de méthodes utilisées lors de l'agrégation de données avec des pandas