Raj*_*mar 2 arrays postgresql json struct go
我将go lang用作后端,将postgreSQL用作数据库。我使用“ github.com/lib/pq”驱动程序来连接数据库。我有一个结构,其中有很多字段,并且里面有一些JSON。
我的结构看起来像这样
ApplyLeave1 struct {
        LeaveId           int       
        EmpId             string    
        SupervisorEmpId   string    
        LeaveDays         float64   
        MDays             float64   
        LeaveType         string    
        DayType           string    
        LeaveFrom         time.Time 
        LeaveTo           time.Time 
        AppliedDate       time.Time 
        LeaveStatus       string    
        ResultDate        time.Time     
        Certificate       []*CertificateInfo
    }
    CertificateInfo struct {
        Id           int64  
        FileName     string 
        FileType     string 
        FileLocation string 
    } 
该结构很大,内部有一些json数组,我的数据库架构与该结构相同。至于我研究的唯一插入方法是使用查询并从mystruct逐个插入到数据库中,例如这样
var leave ApplyLeave1
    db.Exec("INSERT INTO TABLENAME(leaveid,empid,supervisorid,....) VALUES($1,$2,$3,$4,....)",leave.LeaveId,leave.EmpId,leave.SupervisorId,.....)
因为我的结构很大,所以写的时间太长了,是否可以一次插入整个结构,请指导我如何在数据库中插入json数组。感谢任何帮助。
更新信息:
CREATE TABLE IF NOT EXISTS apply_leave1 
(
    leaveid serial PRIMARY KEY NOT NULL ,
    empid varchar(10) NOT NULL REFERENCES employee(empid),
    leavedays double precision NOT NULL DEFAULT 0 ,
    mdays double precision NOT NULL DEFAULT 0 ,
    leavetype varchar(20) NOT NULL DEFAULT '' ,
    daytype text NOT NULL DEFAULT '',
    leavefrom timestamp with time zone NOT NULL,
    leaveto timestamp with time zone NOT NULL,
    applieddate timestamp with time zone NOT NULL,
    leavestatus varchar(15) NOT NULL DEFAULT ''  ,
    resultdate timestamp with time zone,
    certificatestatus bool NOT NULL DEFAULT FALSE,
    certificate json[])
在certificate(json [])内部,我将拥有您可以在上面的结构信息中看到的certificateinfo结构的所有字段。在这里,我将证书指定为json []。我不知道哪个是更好的json或json []进行检索。我将执行以下操作,而如果使用PostgreSQL,我将无法进行。
很抱歉,这么复杂。自从我在Postgres中使用json以来,我一直有很多疑问。所以请忍受我的意识不足的问题。谢谢...感谢您的帮助。
您可以使用https://github.com/jmoiron/sqlx库。它具有NamedExec功能,您可以将变量传递给它。但是首先,您需要db为每个struct字段定义标记。
简化示例:
import (
    _ "github.com/lib/pq"
    "github.com/jmoiron/sqlx"
    "log"
)
type ApplyLeave1 struct {
    LeaveId           int       `db:"leaveid"`
    EmpId             string    `db:"empid"`
    SupervisorEmpId   string    `db:"supervisorid"`
}
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
if err != nil {
    log.Fatalln(err)
}
query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid) 
          VALUES(:leaveid, :empid, :supervisorid)`
var leave1 ApplyLeave1
_, err := db.NamedExec(query, leave1)
if err != nil {
    log.Fatalln(err)
}
| 归档时间: | 
 | 
| 查看次数: | 5114 次 | 
| 最近记录: |