Rumah >pembangunan bahagian belakang >Golang >db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?
Apabila menggunakan Golang untuk operasi pangkalan data, kami sering menggunakan kod seperti `db.Model(&Userable).Create(data)` untuk mencipta data baharu. Walau bagaimanapun, kadangkala kita mungkin menghadapi masalah: bagaimana untuk menghantar nama jadual yang betul? Dalam artikel ini, editor PHP Youzi akan menjawab soalan ini secara terperinci untuk membantu pembaca lebih memahami cara menghantar nama jadual dengan betul untuk operasi pangkalan data yang lancar.
Saya cuba memasukkan baris ke dalam jadual yang ditakrifkan sebagai model. Berikut ialah coretan kod yang berkaitan:
Struktur pakej:
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") } }
Takrif jadual:
testdb=# \d+ usertable Table "public.usertable" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description -----------+------+-----------+----------+---------+----------+--------------+------------- firstname | text | | | | extended | | lastname | text | | | | extended | |
Ralat berikut akan berlaku semasa melaksanakan insertRow.go:
(/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>}
Nama jadual dalam arahan sisip nampaknya kosong, sila beritahu saya apa yang salah dengan arahan sisip saya dan bagaimana saya boleh menghantar nama jadual yang betul kepada panggilan Cipta.
Saya juga mencubanya dengan hasil yang sama:
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") } }
Anda menyediakan peta[rentetan]antaramuka{} untuk disisipkan, tetapi gorm menjangkakan akan diluluskan struct
user := models.Usertable{ Firstname: "MyFirstName", Lastname: "LastName", } result := db.DB.Debug().Create(&user)
Atas ialah kandungan terperinci db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!