Heim >Backend-Entwicklung >Golang >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.
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") } }
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!