Heim >Backend-Entwicklung >Golang >db.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?

db.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?

PHPz
PHPznach vorne
2024-02-08 22:15:08663Durchsuche

db.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?

Wenn wir Golang für Datenbankoperationen verwenden, verwenden wir häufig Code wie „db.Model(&Usertable).Create(data)“, um neue Daten zu erstellen. Manchmal stoßen wir jedoch auf ein Problem: Wie übergibt man den richtigen Tabellennamen? In diesem Artikel wird der PHP-Editor Youzi diese Frage ausführlich beantworten, um den Lesern zu helfen, besser zu verstehen, wie der Tabellenname für einen reibungslosen Datenbankbetrieb korrekt übergeben wird.

Frageninhalt

Ich versuche, eine Zeile in eine als Modell definierte Tabelle einzufügen. Hier sind die relevanten Codeausschnitte:

Paketstruktur:

gorm
|- server
   |- insertRow.go
|- pkg
   |- models
      |- mytable.go
   |- database
      | - connectdb.go

mytable.go:

package models

type Usertable struct {
    Firstname    string `gorm:"column:firstname"`
    Lastname  string `gorm:"column:lastname"`
}

func (fmap *Usertable) TableName() string { return "usertable" }

insertRow.go

package main
import (
        "fmt"
       "gorm/pkg/models"
        "gorm/pkg/database"
)

func  main() {
  params := map[string]interface{} {
        "Firstname" : "MyFirstName",
        "Lastname" : "LastName" ,
 }
        db, _ := database.NewStorage("postgres", "testdb")

        var user models.Usertable

        err := db.DB.Debug().Model(&user).Create(params)
        if err != nil {
                fmt.Println("Error :=", err)
        } else {
                fmt.Println("Success")
        }

}

Tabellendefinition:

testdb=# \d+ usertable
                                 Table "public.usertable"
  Column   | Type | Collation | Nullable | Default | Storage  | Stats target | Description
-----------+------+-----------+----------+---------+----------+--------------+-------------
 firstname | text |           |          |         | extended |              |
 lastname  | text |           |          |         | extended |              |

Der folgende Fehler tritt beim Ausführen von insertRow.go auf:

(/root/gorm/cloudOps/server/testDB/insertRow.go:17)
[2023-09-23 23:51:26]  pq: zero-length delimited identifier at or near """"

(/root/gorm/cloudOps/server/testDB/insertRow.go:17)
[2023-09-23 23:51:26]  [0.45ms]  **INSERT INTO "" DEFAULT VALUES RETURNING "".***
[0 rows affected or returned ]
Error := &{{{0 0} 0 0 {{} 0} {{} 0}} map[Firstname:MyFirstName Lastname:LastName] pq: zero-length delimited identifier at or near """" 0 0xc0000a4b60 false 2 {0xc0001a3d60} 0xc0001e8420 {{0 0} {[] {} 0xc00021cc20} map[] 0} 0xc0000a4c30 <nil> 0xc0000a2c78 false <nil>}

Der Tabellenname im Einfügebefehl scheint leer zu sein. Bitte lassen Sie mich wissen, was mit meinem Einfügebefehl nicht stimmt und wie ich den richtigen Tabellennamen an den Create-Aufruf übergeben kann.

Ich habe es auch mit dem gleichen Ergebnis versucht:

package main
import (
    "fmt"
//       "gorm/pkg/models"
    "gorm/pkg/database"
    "gorm.io/gorm"
)

type Usertable struct {
    gorm.Model
    Firstname    string `gorm:"column:firstname"`
    Lastname  string `gorm:"column:lastname"`
}

func  main() {
  params := map[string]interface{} {
    "Firstname" : "MyFirstName",
    "Lastname" : "LastName" ,
 }
    db, _ := database.NewStorage("postgres", "testdb")


    err := db.DB.Debug().Model(&Usertable{}).Create(params)
    if err != nil {
        fmt.Println("Error :=", err)
    } else {
        fmt.Println("Success")
    }

}

Workaround

Sie haben eine Map[string]interface{} zum Einfügen eingerichtet, aber gorm erwartet, dass eine Struktur übergeben wird

user := models.Usertable{
    Firstname: "MyFirstName",
    Lastname:  "LastName",
}

result := db.DB.Debug().Create(&user)

Das obige ist der detaillierte Inhalt vondb.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen