Как удалить строку в go-sqlite3

# #sqlite #go

Вопрос:

Я использую приведенный ниже код для добавления двух строк в таблицу

 package main

import (
    "database/sql"
    "fmt"
    "log"
    "strconv"

    _ "github.com/mattn/go-sqlite3"
)

func main() {
    database, _ := sql.Open("sqlite3", "./nraboy.db")
    statement, _ := database.Prepare("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY, firstname TEXT, lastname TEXT)")
    statement.Exec()
    statement, _ = database.Prepare("INSERT INTO people (firstname, lastname) VALUES (?, ?)")
    statement.Exec("Nic", "Raboy")
    statement, _ = database.Prepare("INSERT INTO people (firstname, lastname) VALUES (?, ?)")
    statement.Exec("Tom", "Hardy")
    _, err := statement.Exec("delete from people where id = 1")
    if err != nil {
        log.Fatal(err)
    }
    rows, _ := database.Query("SELECT id, firstname, lastname FROM people")
    var id int
    var firstname string
    var lastname string
    for rows.Next() {
        rows.Scan(amp;id, amp;firstname, amp;lastname)
        fmt.Println(strconv.Itoa(id)   ": "   firstname   " "   lastname)
    }
}
 

но когда я добавляю _, err := statement.Exec("delete from people where id = 1") для удаления одну из строк, я получаю следующую ошибку:

 2021/07/09 16:21:07 sql: expected 2 arguments, got 1
exit status 1
 

Как удалить строку в таблице ?

Ответ №1:

Похоже, вы забыли вызвать statement, _ = database.Prepare("delete from people where id = 1") команду «Удалить». При вызове statement.Exec("delete from people where id = 1") ранее подготовленного оператора он все еще действует и ожидает двух аргументов (имя, фамилия).