Я пишу простой API на Go, используя MySQL, но мой код MySQL вставляет данные в строку, даже если столбец установлен на NOT NULL
. Вот мой код:
schema.sql
CREATE TABLE IF NOT EXISTS seller (
seller_id int NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL UNIQUE,
contact varchar(255) NOT NULL,
street varchar(255) NOT NULL,
city varchar(255) NOT NULL,
nip varchar(255) NOT NULL UNIQUE,
bank varchar(255) NOT NULL,
account_number varchar(255) NOT NULL UNIQUE,
PRIMARY KEY (seller_id)
);
базы данных / MySQL / invoice.go
func (r *invoiceRepository) CreateSeller(seller *invoice.Seller) error {
query := "INSERT INTO seller (name, contact, street, city, nip, bank, account_number) VALUES (?, ?, ?, ?, ?, ?, ?)"
stmt, err := r.db.Prepare(query)
if err != nil {
log.Errorf("Unable to create seller %s: %v", seller.SellerName, err)
return err
}
res, err := stmt.Exec(&seller.SellerName, &seller.SellerContact, &seller.SellerStreet, &seller.SellerCity, &seller.SellerNIP, &seller.SellerBank, &seller.SellerAccountNumber)
if err != nil {
log.Errorf("Error while creating seller: %v", err)
return err
}
newID, err := res.LastInsertId()
if err != nil {
log.Errorf("Error while getting inserted id: %v", err)
return err
}
log.Infof("Created seller %s [id=%d]", seller.SellerName, newID)
return nil
}
Теперь, когда я делаю POST-запрос (используя httpie) только с именем seller_name, мой код создает строки даже с нулевыми столбцами. Это выглядит так:
http POST localhost:8000/api/seller/create seller_name=testt
Вот как выглядит моя строка в таблице:
+-----------+-------+---------+--------+------+-----+------+----------------+
| seller_id | name | contact | street | city | nip | bank | account_number |
+-----------+-------+---------+--------+------+-----+------+----------------+
| 1 | testt | | | | | | |
+-----------+-------+---------+--------+------+-----+------+----------------+
Я не знаю, где я допустил ошибку.
РЕДАКТИРОВАТЬ (добавлена модель)
type Seller struct {
SellerID int64 `json:"seller_id"`
SellerName string `json:"seller_name"`
SellerContact string `json:"seller_contact"`
SellerStreet string `json:"seller_street"`
SellerCity string `json:"seller_city"`
SellerNIP string `json:"seller_nip"`
SellerBank string `json:"seller_bank"`
SellerAccountNumber string `json:"seller_account_number"`
}