插入NULL作为时间从JSON解码的时间

时间:2019-03-31 01:31:07

标签: json go mariadb go-gorm

我正在现有生产数据库上建立REST端点的原型,并陷入了空值datetime列。我已经读过Nullable time.Time in golangFetching NULL datetime value in MySQL using GORM之类的线程,但是无法将新对象发布到REST端点,也无法将JSON中未列出的datetime类型的属性作为NULL存储到MariaDB中。

我正在提交HTTP请求,例如

POST /countries
{ "iso_code" : "CZ", "title" : "Czechia" }

表具有以下架构

create table country
(
    iso_code   char(2)                              not null comment 'Country alpha-2 ISO code'
        primary key,
    title      varchar(255)                         null comment 'Country name',
    created_on datetime default current_timestamp() not null,
    updated_on datetime                             null on update current_timestamp()
)

我已经尝试使用mysql.NullTime类型,time.Time类型作为指针,在映射中指定sql:DEFAULT:NULL,gorm:“ null”映射,我还直接在保存之前将nil直接分配给newCountry.UpdatedAt。 BeforeSave gorm钩子也没有影响。

该模式非常明确

    type Country struct {
        IsoCode string `json:"iso_code" gorm:"primary_key" sql:"size:2"`
        Title *string `json:"title,omitempty" gorm:"null" sql:"size:255"`
        CreatedAt *time.Time `json:"created_at,omitempty" gorm:"column:created_on"`
       UpdatedAt *time.Time `json:"updated_at,omitempty" gorm:"column:updated_on;null" sql:"DEFAULT:NULL"`
    }

我正在使用GORM存储对象

func CreateCountry(country *m.Country) *m.Country {
    fmt.Println(country)

    existingCountry := GetCountry(country.IsoCode)
    if existingCountry == nil {
        err := GetDB().Create(country).Error
        // ...
    } 
    // ...
}

在此方法中,国家/地区没有UpdatedAt的值,但是调用了Create(country),它将确切的值存储到两个datetime列中。

我正在这样从HTTP请求正文中读取内容

var CreateCountry = func(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.Body)

    newCountry := &m.Country{}
    err := json.NewDecoder(r.Body).Decode(newCountry)
    // ...
}

这里的主体在日期时间属性中也为零。

不知道还能做些什么来产生插入语句

INSERT  INTO `country` (`iso_code`,
`title`,`created_on`,`updated_on`) VALUES (?,?,?,?)[KR 0xc0001f6130 null null] 

不是

INSERT  INTO `country` (`iso_code`,
`title`,`created_on`,`updated_on`) VALUES (?,?,?,?)[KR 0xc0001f6130 2019-03-31 03:16:41.5158848 +0200 CEST m=+16.4487208
01 2019-03-31 03:16:41.5158848 +0200 CEST m=+16.448720801]

0 个答案:

没有答案